思维导图
封装Mystring
#include <iostream>
#include<cstring>
using namespace std;
class Mystring{
public:
//无参构造函数
Mystring():size(10){
str=new char[size];
strcpy(str,"");
cout<<"无参构造函数"<<endl;
}
//有参构造函数
Mystring(const char *s){
size=strlen(s);
str=new char[size+1];
strcpy(str,s);
cout<<"有参构造函数"<<endl;
}
//拷贝构造函数
Mystring(const Mystring &other){
this->size=other.size;
this->str=new char[this->size];
strcpy(this->str,other.str);
cout<<"拷贝构造函数"<<endl;
}
//析构函数
~Mystring(){
delete []str;
cout<<"析构函数"<<endl;
}
//拷贝赋值函数
Mystring &operator=(const Mystring &other){
if(this!=&other){
this->size=other.size;
strcpy(this->str,other.str);
}
cout<<"拷贝赋值函数"<<endl;
return *this;
}
//判空函数
bool empty()const{
return !strlen(this->str);
}
//size函数
int strsize()const{
return strlen(this->str);
}
//c_str函数
char *c_str(){
return this->str;
}
//at函数
char &at(int pos){
return *(this->str+pos-1);
}
//加号运算符重载
Mystring operator+(const Mystring &R)const{
Mystring temp;
strcat(temp.str,this->str);
strcat(temp.str,R.str);
return temp;
}
//加等于运算符重载
Mystring &operator+=(const Mystring &R){
strcat(this->str,R.str);
return *this;
}
//关系运算符重载(>)
bool operator>(const Mystring &R)const{
if(strcmp(this->str,R.str)>0){
return true;
}
else{
return false;
}
}
//中括号运算符重载
char &operator[](int pos)const{
return *(this->str+pos-1);
}
//展示函数
void show(){
cout<<str<<endl;
}
private:
char *str; //字符串首地址
int size; //字符串大小
};
int main()
{
Mystring str1("hello");
str1.show();
Mystring str2("world");
str2.show();
Mystring str3;
if(str3.empty()){
cout<<"str3现在为空,字符串长度为"<<str3.strsize()<<endl;
}
str3=str1;
str3.show();
if(!str3.empty()){
cout<<"str3现在不为空,字符串长度为"<<str3.strsize()<<endl;
}
Mystring str4=str2;
str4.show();
str4+=str3;
str4.show();
cout<<"str4字符串第7位是"<<str4.at(7)<<",str4字符串第13位是"<<str4[13]<<endl;
cout<<str4.c_str()<<endl;
if(str3>str2){
cout<<"str3>str2"<<endl;
}
else{
cout<<"str3<str2"<<endl;
}
return 0;
}