1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 class String{ 5 public: 6 //默认构造函数 7 String(const char* str=NULL); 8 //复制构造函数 9 String(const String &str); 10 //析构函数 11 ~String(); 12 //字符串连接 13 String operator+(const String & str); 14 //字符串赋值 15 String & operator=(const String & str); 16 //字符串赋值 17 String & operator=(const char* str); 18 //判断字符串是否相等 19 bool operator==(const String & str); 20 //获取字符串长度 21 int length(); 22 //求子字符串[start,start+-1] 23 String substr(int start,int n); 24 //重载输出 25 friend ostream & operator<<(ostream & o,const String & str); 26 private: 27 char * data; 28 int size; 29 }; 30 //构造函数 31 String::String(const char *str){ 32 if(str==NULL){ 33 data=new char[1]; 34 data[0]=‘\0‘; 35 size=0; 36 }else{ 37 size=strlen(str); 38 data=new char[size+1]; 39 strcpy(data,str); 40 } 41 cout<<str<<"构造"<<endl; 42 } 43 //复制构造函数 44 String::String(const String & str){ 45 size=str.size; 46 data=new char[size+1]; 47 cout<<str<<"拷贝"<<endl; 48 strcpy(data,str.data); 49 } 50 //析构函数 51 String::~String(){ 52 delete[] data; 53 } 54 //字符串连接 55 String String::operator+(const String & str){ 56 String newStr; 57 //释放原有空间 58 delete[] newStr.data; 59 newStr.size=size+str.size; 60 newStr.data=new char[newStr.size+1]; 61 strcpy(newStr.data,data); 62 strcpy(newStr.data+size,str.data); 63 return newStr; 64 } 65 //字符串赋值 66 String & String::operator=(const String &str){ 67 if(data==str.data){ 68 return *this; 69 } 70 delete[] data; 71 size=str.size; 72 data=new char[size+1]; 73 strcpy(data,str.data); 74 cout<<str<<"赋值"<<endl; 75 return *this; 76 } 77 //字符串赋值 78 String & String::operator=(const char* str){ 79 if(data==str){ 80 return *this; 81 } 82 delete[] data; 83 size=strlen(str); 84 data=new char[size+1]; 85 strcpy(data,str); 86 cout<<str<<"赋值"<<endl; 87 return *this; 88 } 89 //判断是否字符串相等 90 bool String::operator==(const String &str){ 91 return strcmp(data,str.data)==0; 92 } 93 //获取字符串长度 94 int String::length(){ 95 return size; 96 } 97 //求子字符串[start,start+n-1] 98 String String::substr(int start,int n){ 99 String newStr; 100 delete[] newStr.data; 101 newStr.data=new char[n+1]; 102 for(int i=0;i<n;++i){ 103 newStr.data[i]=data[start+i]; 104 } 105 newStr.data[n]=‘\0‘; 106 newStr.size=n; 107 return newStr; 108 } 109 //重载输出 110 ostream & operator<<(ostream &o,const String & str){ 111 o<<str.data; 112 return o; 113 } 114 int main(){ 115 String str1("Hello "); 116 String str2=str1; 117 str2=str1; 118 return 0; 119 }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。