- #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)
oracle创建数据库,导入dmp操作全家桶
java计算机毕业设计小区失物招领网站源码+数据库+系统+lw文档+mybatis+运行部署
android studio SQLite数据库的简单使用
NodeJs实战-Express构建照片存储网站(2)-上传、展示文件
Mysql开启binlog 和 打开gtid_mode
第二部分:DDD中的值对象
UML类图总结
Spark 中数据结果传输到 Driver 端
MQTT vs. XMPP,哪一个才是IoT通讯协议的正解
-
原文地址:https://blog.csdn.net/cscssacd/article/details/133616978