1、仿照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):str(other.str), size(other.size)
- {
- str = new char[size];
- str = new char[size+1];
- strcpy(str, other.str);
- }
-
- //析构函数
- ~myString()
- {
- delete []str; //释放成员指针的空间
-
- cout<<"Stu::析构函数:"<<this<
- }
-
- //拷贝赋值函数
- myString & operator=(const myString &other)
- {
- if(this != &other)
- {
- this->str = other.str;
- this->size = other.size;
-
- //判断原来指针空间释放被清空
- if(this->str != NULL)
- {
- delete this->str;
- }
- this->str = new char(*other.str);
- }
- cout<<"Stu:: 拷贝赋值函数"<
-
- //返回自身引用
- return *this;
- }
- //判空函数
- bool empty()const
- {
- if(size == 0)
- {
- return true;
- }
- return false;
- }
-
- //size函数
- int my_size()const
- {
- return size;
- }
-
- //c_str函数
- const char *c_str() const
- {
- return str;
- }
-
- //at函数
- char &at(int pos)
- {
- if (pos >= 0 && pos < size)
- {
- return str[pos];
- }
- }
-
- //加号运算符重载
- const myString operator+ (const myString &R)const
- {
- myString c;
- c.size = this->size + R.size;
- c.str = new char[c.size+1];
- strcpy(c.str, str);
- strcat(c.str, R.str);
-
- return c;
- }
- //加等于运算符重载
- const myString operator+= (const myString &other)
- {
- char *temp = new char[size + other.size + 1];
- strcpy(temp, str);
- strcat(temp, other.str);
- delete[] str;
- str = temp;
- size += other.size;
-
- return *this;
- }
- //关系运算符重载(>)
- bool operator> (const myString &R)const
- {
- return (strcmp(str, R.str) > 0);
- }
- //中括号运算符重载
- char &operator[](int pos)
- {
- return at(pos);
- }
- };
-
- int main()
- {
- myString s1("good");
- myString s2("day");
-
- myString s3 = s1 + s2;
- cout<
c_str()< -
- s1 += "morning";
- cout<
c_str()< -
- if(s1 >s2)
- {
- cout<
c_str()<<"大于"<c_str()< - }
-
- return 0;
- }
运行结果:
- goodday
- Stu::析构函数:0x61fdf0
- Stu::析构函数:0x61fe00
- goodmorning
- goodmorning大于day
- Stu::析构函数:0x61fdc0
- Stu::析构函数:0x61fdd0
- Stu::析构函数:0x61fde0
2、思维导图
-
相关阅读:
关于中台的一点思考
koa中使用koa-body获取post请求中的参数
Springboot+Easyexcel将数据写入模板文件并导出Excel
3D模型格式转换工具HOOPS Exchange助力Halocline开发VR
resultmap
原码 反码 补码 移码
【JavaWeb】 一文搞懂Request
转发网关与NAT网关
Java基础面试题
python封装,继承,复写详解
-
原文地址:https://blog.csdn.net/Lychee_z23/article/details/132817460