C++铁道的第2版-3.ppt

  1. 1、本文档共102页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C铁道的第2版-3

例3.22 有关浅拷贝的例子。 #includeiostream #include string using namespace std; class Student{ public: Student(char *name1,float score1); ~Student(); private: char *name; //学生姓名 float score; //学生成绩 }; Student::Student(char *name1,float score1) { coutConstructing...name1endl; name=new char[strlen(name1)+1]; if (name !=0) { strcpy(name,name1); score=score1; } } Student::~Student() { coutDestructing...nameendl; name[0]=\0; delete []name; } int main() { Student stu1(liming,90);//定义类Student的对象stu1 Student stu2=stu1; //调用默认的拷贝构造函数 return 0; } 程序运行结果如下: Constructing...liming Destructing...liming Destructing...葺葺葺葺葺 程序运行后,调用了默认的拷贝构造函数, 出现了所谓的“指针悬挂”现象。 例3.23 关于深拷贝的例子。 #includeiostream #include string using namespace std; class Student { private: char *name; //学生姓名 float score; //学生成绩 public: Student(char *name1,float score1); //声明拷贝构造函数 Student(Student stu); ~Student(); }; Student::Student(char *name1,float score1) { coutConstructing...name1endl; name=new char[strlen(name1)+1]; if (name !=0){ strcpy(name,name1); score=score1; } } 为了解决浅拷贝出现的错误,必须显式地定义一个自己的拷贝构造函数,使之不但拷贝数据成员,而且为对象stu1和stu2分配各自的内存空间,这就是所谓的深拷贝。 Student::Student(Student stu) //定义拷贝构造函数 { coutCopy constructing...stu.nameendl; name=new char[strlen(stu.name)+1]; if (name !=0) { strcpy(name,stu.name); score=stu.score; } } Student::~Student() { coutDestructing...nameendl; name[0]=\0; delete []name;} int main() { Student stu1(liming,90); //定义类Student的对象stu1 Student stu2=stu1; //调用自定义的拷贝构造函数 return 0; } 为了解决浅拷贝出现的错误,必须显式地定义一个自己的拷贝构造函数,使之不但拷贝数据成员,而且为对象stu1和stu2分配各自的内存空间,这就是所谓的深拷贝。 Student::Student(Student stu) //定义拷贝构造函数 { coutCopy constructing...stu.nameendl; name=new char[strlen(stu.name)+1]; if (name !=0) { strcpy(name,stu.name); score=stu.score; } } Student::~Student() { coutDestructing...nameendl; name[0]=\0; dele

文档评论(0)

liwenhua00 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档