- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第章类和对
* 学生类(计算平均学分绩)、商品类(卖商品函数,以数量为参数)、足球队类(计算积分) * 用程序再进行验证 * 查一下静态数据成员的访问权限 * * * * 拷贝构造函数 系统会自动生成缺省的拷贝构造函数,实现对象间的拷贝(浅拷贝) 使用下列形式的说明语句 类名 对象名2(对象名1); 类名 对象名2 = 对象名1; 对象作为函数的赋值参数 函数的返回值为类的对象 当程序出现上述三类情况时,自动调用拷贝构造函数 Database Information System Lab * 拷贝构造函数 显式拷贝构造函数(深拷贝) 在某些情况下,必须在类定义中给出显式拷贝构造函数,以实现用户指定的拷贝功能(深拷贝) 假设在某类的普通构造函数中分配并使用了某些系统资源,而且在该类的析构函数中释放了这些资源。如果执行“浅拷贝”,使两个对象使用相同的系统资源,调用析构函数将会两次释放相同的资源而导致错误。 给出显式的拷贝构造函数,可以在实现拷贝的过程中,为“被拷贝”的对象分配新的系统资源,避免了重复释放资源的错误 Database Information System Lab * 拷贝构造函数 【例7.18】默认拷贝构造函数产生的问题 //MyClass.h class MyClass { char *name; public: MyClass(char *); ~MyClass(); void print(); }; Database Information System Lab * 拷贝构造函数 //MyClass.cpp #includeiostream.h #includestring.h #includeMyClass.h MyClass::MyClass(char *n){ name = new char[strlen(n)+1]; strcpy(name,n); } MyClass::~MyClass(){ delete []name; } void MyClass::print(){ coutMember name=nameendl; } Database Information System Lab * 拷贝构造函数 Database Information System Lab * //Main.cpp #includeiostream.h #includeMyClass.h void main(){ char *p = new char[20]; cinp; MyClass MyObj(p); MyClass MyObj1=MyObj;//执行拷贝构造函数 MyObj.print(); MyObj1.print(); } 运行结果: abcde Member name=abcde Member name=abcde 拷贝构造函数 【例7.18】自定义拷贝构造函数 //MyClass.h class MyClass { char *name; public: MyClass(char *); MyClass(MyClass); ~MyClass(); void print(); }; Database Information System Lab * 拷贝构造函数 //MyClass.cpp #includeiostream.h #includestring.h #includeMyClass.h MyClass::MyClass(char *n){ name = new char[strlen(n)+1]; strcpy(name,n); } //自定义拷贝构造函数,实现深拷贝 MyClass::MyClass(MyClass CopyObj){ name = new char[strlen(CopyO)+1]; strcpy(name,CopyO); } Database Information System Lab * 拷贝构造函数 Database Information System Lab * MyClass::~MyClass(){ delete []name; } void MyClass::print(){ coutMember name=nameendl; } 拷贝构造函数 Database Information System Lab * //Main.cpp #includeiostream.h #includeMyClass.h void main(){ char *p = new char[20]; cinp; MyClass MyObj(p); MyClass MyObj1=MyObj;//执行拷贝构造函数
原创力文档


文档评论(0)