Ex7_4.cpp
上传用户:wuzhousb
上传日期:2022-07-12
资源大小:380k
文件大小:1k
源码类别:

书籍源码

开发平台:

Visual C++

  1. //【例7.4】类含有动态生成的数据成员,必须自定义析构函数以释放动态分配的内存,自定义
  2. //拷贝构造函数(Copy Structor)和拷贝赋值操作符(Copy Assignment Operator)实现深拷贝。
  3. #include <iostream>
  4. #include <cstring>
  5. using namespace std;
  6. class student{
  7. char *pName;          //为了演示深拷贝,不用string类
  8. public:
  9. student();
  10. student(char *pname);
  11. student(student &s);
  12. ~student();
  13. student & operator=(student &s);
  14. };
  15. student::student(){
  16. cout<<"Constructor";
  17. pName=NULL;
  18. cout<<"缺省"<<endl;
  19. }
  20. student::student(char *pname){
  21. cout<<"Constructor";
  22. if(pName=new char[strlen(pname)+1]) strcpy(pName,pname);
  23. //加一不可少,否则串结束符冲了其他信息,析构会出错!
  24. cout<<pName<<endl;
  25. }
  26. student::student(student &s){
  27. cout<<"Copy Constructor";
  28. if(s.pName){
  29. if(pName=new char[strlen(s.pName)+1]) strcpy(pName,s.pName);
  30. cout<<pName<<endl;
  31. }
  32. else pName=NULL;
  33. }
  34. student::~student(){     //因有动态生成的类成员,析构函数不可用缺省的析构函数
  35. cout<<"Destructor";
  36. if(pName) cout<<pName<<endl;
  37. delete [] pName;
  38. }
  39. student & student::operator=(student &s){
  40. cout<<"Copy Assign operator";
  41. delete[] pName; 
  42. if(s.pName){
  43. if(pName=new char[strlen(s.pName)+1]) strcpy(pName,s.pName);
  44. cout<<pName<<endl;
  45. }
  46. else pName=NULL;
  47. return *this;
  48. }
  49. int main(void){
  50. student s1("范英明"),s2("沈俊"),s3;
  51. student s4=s1;
  52. s3=s2;
  53. return 0;
  54. }