第四周复制构造函数引用.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四周复制构造函数引用

* 若不定义拷贝构造函数: void main(void) { CA s1(China!); CA s2(s1); //A couts1=s1.GetS()\t; couts2=s2.GetS()\n; } 则使用系统自动产生的 复制构造函数: CA::CA(CA s) { ps=s.ps; } * 使用自定义复制构造函数 CA::CA(CA s) { if(s.ps){ //如果s中的成员数据非空的话 ps=new char[strlen(s.ps)+1]; //为当前对象的成员数据动态分配存储空间 strcpy(ps,s.ps);//将s中的成员数据拷贝给当前对象成员数据 } else ps=0; } s1=China! S2=China! * 构造函数和析构函数 1、构造函数:类的特殊成员函数,主要用于初始化对象。 其特点: 1)在建立对象时,系统自动调用构造函数,构造函数不能被程序员显式调用。 2)构造函数的名字必须与相应的类同名。 3)构造函数没有返回值类型,可以有任意类型的参数。不能包含return语句。 4)若在定义类时未定义构造函数,则系统自动生成默认构造函数(空函数)。 若程序已经定义构造函数,系统不再提供默认构造函数 * 构造函数的作用 不仅完成了对象数据成员的初始化,同时检查了初始化值的有效性。如果某个初始化参数值错误,就用一个最接近的合法的值去替换它。 如果不定义任何构造函数,编译器会自动产生一个什么也不作的无参数的构造函数。 只要定义了一个构造函数,就不再提供默认的构造函数 * 对象的生成和撤销 #includeiostream.h #includestring.h class Demo {public: Demo(const char* nm) ~Demo(); private: char name[20]; }; Demo::Demo(const char *nm) { strncpy(name,nm,20); coutname“调用析构函数”‘\n’; } Demo::~Demo() { coutname“调用析构函数“; } Void func() { Demo LocalFuncObject(“函数func 的局部对象”); Static Demo staticObject(“静态对象”); Cout”在函数func内运行\n”; } Demo globalObject(“全局对象”); Void main() { Demo LocatMainObject(“main函数的局部对象”); cout“在main中,调用func之前\n”; func(); cout“在main中,调用func之后\n” } * 构建对象的顺序 创建对象的唯一途径是调用构造函数 1。所有全局对象在主函数main之前构造 全局对象之间顺序不定 2。局部和静态对象以声明的顺序构造 静态对象只被构造一次 3。析构函数以与构造函数相反的顺序被调用 * 全程对象调用构造函数 Main函数的局部对象调用构造函数 在main中调用函数func之前 函数func的局部对象调用构造函数 静态对象调用构造函数 在函数func内运行 函数func的局部对象调用析构函数 在main中调用func函数之后 Main函数的局部对象调用析构函数 静态对象调用析构函数 全局对象调用析构函数 * 构造函数何时被调用? 在有对象生成时,系统要调用相应构造函数。 如:定义新的对象 CDATE date1; 用new操作符给对象指针动态分配存储空间时 特殊用法 不会调用构造函数: 创建对象引用时 创建对象指针时 * 析构函数何时被调用? 撤销对象时自动调用析构函数 自动撤销:局部类型变量、全局、静态类型变量 主动撤销:用new操作符为对象指针动态分配空间 * 构造函数具有普通成员函数几乎所有的性能 可以在类内部、外部定义 可以带默认值, 可以有多个参数, 可以不带参数, 可以重载 构造函数的定义 * 构造函数的重载 一个类可以具有多个构造函数,这使得类可以根据不同的要求进行不同的初始化。 系统会自动调用形参表与实参表匹配的构造函数 如果创建对象时没有向构造函数传递实参,则在对象名后面不要加括号。否则是函数原型说明。 * 默认的构造函数 如果类定义中没有构造函数,系统会自动产生默认的构造函数。参数表和函数体都为空。 如果类中定义了构造函数,系统不会再产生默认的构造函数。 创建对象时,没有相应的构造函数,就会产生错误 带默认参数的函数 在函数定义和函数原型说明中,可以给函数的参数指定值,这种函数称为具有缺

文档评论(0)

me54545 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档