- #include
- #include
- using namespace std;
- class myString
- {
- private:
- char *str;
- int size;
- public:
- //无参构造
- myString():size(10)
- {
- str = new char[size]; //构造出一个长度为10的字符串
- strcpy(str,""); //赋值为空串
- }
- //有参构造
- myString(const char *s)
- {
- size = strlen(s);
- str = new char[size+1];
- strcpy(str,s);
- }
-
- //拷贝构造
- myString(const myString &other):size(other.size)
- {
- str = new char [size];
- strcpy(this->str,other.str);
- cout<<"拷贝构造函数"<
- }
-
- //析构函数
- ~myString()
- {
- delete[] this->str;
- cout<<"析构函数"<
- }
- //拷贝赋值函数
- myString &operator = (const myString &other)
- {
- size = other.size;
- strcpy(str,other.str);
- cout<<"拷贝赋值函数"<
- return *this;
-
- }
-
- //判空函数
- bool str_empty(const char *str) const
- {
- if(str ==NULL||*str=='\0')
- {
-
- return true;
- }
- else
- return false;
- }
- //size函数
- int str_size(const char *str)const
- {
- return sizeof(str);
- }
- //c_str函数
- const char *c_str() const
- {
- return str;
- }
- //at函数
- char &at(int pos)
- {
-
-
- return str[pos];
-
- }
- //成员函数版实现加号运算符重载
- myString operator+(const myString &R)const
- {
- myString new_string = *this;
- delete[] new_string.str;
- int len =strlen(this->str)+strlen(R.str)+1;
- new_string.str = new char[len];
- strcpy(new_string.str,this->str);
- strcat(new_string.str,R.str);
- return new_string;
- }
- //成员函数版实现加等于运算符重载
- myString &operator+=(const myString &R)
- {
- int len = strlen(str)+strlen(R.str)+1;
- char *s =this->str;
- str = nullptr;
- delete [] str;
- str = new char [len];
- strcpy(this->str,s);
- strcat(this->str,R.str);
- return *this;
- }
-
- //关系运算符重载
- bool operator>(const myString &R)const
- {
- //先求出长度
- int len1 = strlen(this->str);
- int len2 = strlen(R.str);
- int minlen =(len1
- for(int i=0;i
- {
- if(this->str[i]>R.str[i])
- {
- return true;
- }
- else if(this->str[i]
- {
- return false;
- }
- }
- return len1>len2;
- }
-
- //成员函数版实现中括号运算符重载
- char & operator[](int index)
- {
- if(index>=0&&index
- {
- return str[index];
- }
- }
- //展示函数
- void show()
- {
- cout<<"str = "<
" size = "< - }
- };
- int main()
- {
- myString s1("hello");
- s1[0]='H';
- s1.show();
- myString s2("world");
- s2.show();
- myString s6 =s1;
- s6.show();
- myString s3;
- s3 = s1 + s2;
- cout<
c_str()< - myString s4("hahaha");
- s4+=s1;
- cout<
c_str()< - if(s3>s2)
- {
- cout<<"yes"<
- }
- else
- cout<<"no"<
- myString s5("daydayup");
- s5.show();
- return 0;
- }

-
相关阅读:
Python 自定义模块和包设计英语生词本(文件版)
26-sparkstreaming
《深度学习工业缺陷检测》专栏介绍 & CSDN独家改进实战
基于Python实现的图形绘制系统
c 语言基础:L1-047 装睡
2 万字 + 30 张图 | 细聊 MySQL undo log、redo log、binlog 有什么用?
【SwiftUI模块】0005、SwiftUI-粘性动画指示器引导页
领导不懂IT技术,分不清报表和BI,看完这篇文章就懂了
腾讯、飞书等在线表格自动化编辑--python
线粒体 ClpP 介导的蛋白水解作用可选择性诱导癌细胞死亡
-
原文地址:https://blog.csdn.net/cscssacd/article/details/132818388