7_65.cpp
上传用户:zipjojo
上传日期:2009-07-20
资源大小:70k
文件大小:1k
源码类别:

文章/文档

开发平台:

C/C++

  1. #include <string.h>
  2. #include <iostream.h>
  3. class student
  4. {
  5. public:
  6. student(char * pName="no name",int ssId=0)
  7. {
  8. id=ssId;
  9. name=new char[strlen(pName)+1];
  10. strcpy(name,pName);
  11. cout<<"construct new student "<<pName<<endl;
  12. }
  13. //错误!不能如此编写copy函数,因为实现的是前浅拷贝
  14. /* void copy(student & s)
  15. {
  16. cout<<"construct copy of"<<s.name<<endl;
  17. strcpy(name,s.name);
  18. id=s.id;
  19. }*/
  20. void copy(student & s)  //资源复制函数
  21. {
  22.     if(this==&s)
  23. {
  24.      cout<<"错误:不能将一个对象复制到自己!"<<endl;
  25.      return;
  26. }
  27.      else
  28. {
  29.     name=new char[strlen(s.name)+1];        // ①分配新的堆内存
  30.         strcpy(name,s.name); // ②完成值的复制
  31.         id=s.id;
  32.      cout<<"资源复制函数被调用!"<<endl;
  33. }
  34. }
  35. void disp()
  36. {
  37. cout<<"Name:"<<name<<"  Id:"<<id<<endl;
  38. }
  39. ~student()
  40. {
  41. cout<<"Destruct "<<name<<endl;
  42. delete name;
  43. }
  44. private:
  45. int id;
  46. char * name;
  47. };
  48. void main()
  49. {
  50. student a("Kevin",12),b("Tom",23);   // 调用普通的构造函数
  51.     a.disp();
  52. b.disp();
  53.     a.copy(a);
  54.     b.copy(a);      // 调用资源复制函数
  55. a.disp();
  56. b.disp();
  57. }