例9.1
完整实现str类的例子。
1 #define _CRT_SECURE_NO_WARNINGS 2 3 #include <iostream> 4 #include <string> 5 6 using namespace std; 7 8 class str 9 { 10 private: 11 char *st; 12 public: 13 str(char *s);//使用字符指针的构造函数 14 str(str& s);//使用对象引用的构造函数 15 str& operator=(str& a);//重载使用对象引用的赋值运算符 16 str& operator=(char *s);//重载使用指针的赋值运算符 17 void print() 18 { 19 cout << st << endl;//输出字符串 20 } 21 ~str() 22 { 23 delete st; 24 } 25 }; 26 27 str::str(char *s) 28 { 29 st = new char[strlen(s) + 1];//为st申请内存 30 strcpy(st, s);//将字符串s复制到内存区st 31 } 32 33 str::str(str& a) 34 { 35 st = new char[strlen(a.st) + 1];//为st申请内存 36 strcpy(st, a.st);//将对象a的字符串复制到内存区st 37 } 38 39 str& str::operator=(str& a) 40 { 41 if (this == &a)//防止a=a这样的赋值 42 { 43 return *this;//a=a,退出 44 } 45 delete st;//不是自身,先释放内存空间 46 st = new char[strlen(a.st) + 1];//重新申请内测 47 strcpy(st, a.st);//将对象a的字符串复制到申请的内存区 48 return *this;//返回this指针指向的对象 49 } 50 51 str& str::operator=(char *s) 52 { 53 delete st;//是字符串直接赋值,先释放内存空间 54 st = new char[strlen(s) + 1];//重新申请内存 55 strcpy(st, s);//将字符串s复制到内存区st 56 return *this; 57 } 58 59 void main() 60 { 61 str s1("We"), s2("They"), s3(s1);//调用构造函数和复制构造函数 62 63 s1.print(); 64 s2.print(); 65 s3.print(); 66 67 s2 = s1 = s3;//调用赋值操作符 68 s3 = "Go home!";//调用字符串赋值操作符 69 s3 = s3;//调用赋值操作符但不进行赋值操作 70 71 s1.print(); 72 s2.print(); 73 s3.print(); 74 75 system("pause"); 76 };
例9.2
123
时间: 2024-10-25 07:51:36