仿照string类,完成myString 类
代码:
- #include
- #include
- using namespace std;
- class myString
- {
- private:
- char *str; //记录c风格的字符串
- int size; //记录字符串的实际长度
- public:
- //无参构造
- myString():size(10)
- {
- str = new char[size]; //构造出一个长度为10的字符串
- strcpy(str,""); //赋值为空串
- }
- //有参构造
- myString(const char *s) //string s("hello world")
- {
- size = strlen(s);
- str = new char[size+1];
- strcpy(str, s);
- }
- //拷贝构造
- myString(const myString &other)
- {
- size=other.size;
- str= new char[size];
- strcpy(str,other.str);
- }
- //析构函数
- ~myString()
- {
- delete[] str;
- }
- //拷贝赋值函数
- myString & operator=(const myString &other)
- {
- if(this != &other) //确定不是自己给自己赋值
- {
- this->size = other.size;
- //判断原来指针空间释放被清空
- if(this->str != NULL)
- {
- delete this->str;
- }
- this->str = new char(*other.str);
- }
- cout<<"拷贝赋值函数"<
- return *this; //返回自身引用
- }
- //判空函数
- bool string_empty()
- {
- return size==0;
- }
- //size函数
- unsigned long long int string_size()
- {
- return strlen(str);
- }
- //c_str函数
- const char* c_str(const myString s1)
- {
- char *p=new char[s1.size+1];
- strcpy(p,s1.str);
- return p;
- }
- //at函数
- char &at(int pos)
- {
- if(pos>=0&&pos<this->size)
- {
- return str[pos];
- }
- else
- {
- cout<<"数据输入错误"<
- return str[0];
- }
- }
- //加号运算符重载
- const myString operator+ ( const myString &R)const
- {
- myString s;
- s.size = this->size + R.size;
- strcpy(s.str,this->str);
- strcat(s.str,R.str);
- return s;
- }
-
- //加等于运算符重载
- myString & operator+=(const myString &R)
- {
- this->size += R.size;
- strcat(this->str,R.str);
-
- return *this; //返回自身的引用
- }
-
- //关系运算符重载(>)
- bool operator>(const myString &R)const
- {
- if(strcmp(this->str,R.str)>0)
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
- //中括号运算符重载
- char & operator[](int index)
- {
- return this->str[index];
- }
-
- };
- int main()
- {
- myString s1("hello");
- string s2="world";
- string s3="war";
- myString s4("world");
- cout<
string_size()< - cout<
at(2)< - s2+=s3;
- cout<
- cout<
- if(s1 > s4) //调用关系运算符重载函数
- {
-
-
相关阅读:
【lwip】08-ARP协议一图笔记及源码实现
HTML5期末考核大作业,网站——青岛民俗 7页。 美丽家乡 学生旅行 游玩 主题住宿网页
湖南麒麟两种修复硬盘方式
【踩坑专栏】禁止kafka自带的日志
AI黑科技:名片识别革命,一键get轻松
模拟退火算法
yolo的一个ui界面中做一个摄像头检测的功能
Dynamsoft Label Recognizer SDK FOR .CPP.NET
【js学习笔记五十四】BFC方式
【毕业季·进击的技术er】--毕业到工作小结
-
原文地址:https://blog.csdn.net/cwj442257772/article/details/132817025