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、思维导图

-
相关阅读:
初识Java 13-1 异常
java-net-php-python-springboot药膳食疗系统计算机毕业设计程序
Linux 文件操作(一) —— 遍历指定目录下的所有文件
Git管理 — 分支管理
Python 数据可视化解决方案之 集成 PyPlot 和 PySimpleGUI (教程含源码)
科学计算三维可视化笔记(第五周 交互界面)
Linux基础 - Samba 或 NFS 实现文件共享
MySQL安全基线检查
影视广告创意与制作(四)
耗时两个月整理了这份史上最全Spring知识总结,全部掌握直接冲P8架构师
-
原文地址:https://blog.csdn.net/Lychee_z23/article/details/132817460