C++总复习汇总资料(下).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文档。上传文档
查看更多
C总复习汇总资料(下)

* 9.3.6 复制构造函数 1.合成复制构造函数 每个类必须有一个复制构造函数。如果类没有定义复制构造函数,编译器就会自动合成一个,称为合成复制构造函数(synthesized copy constructor)。 * 9.3.6 复制构造函数 2.何时使用复制构造函数 以下3种情况会使用复制构造函数。 (1)用一个对象显式或隐式初始化另一个对象时。 C++支持两种初始化形式:复制初始化,使用等号(=);直接初始化,将初始化式放在圆括号中。 复制初始化和直接初始化是有区别的:复制初始化总是调用复制构造函数,而直接初始化直接调用与实参匹配的构造函数。 Point b(1,2); //调用构造函数 Point c(b); //调用复制构造函数 Point a=b; //调用复制构造函数 * 9.3.6 复制构造函数 (2)函数参数按值传递对象时或函数返回对象时。 当函数形参为对象类型,函数调用按值传递对象,即编译器调用复制构造函数产生一个实参对象副本传递到函数中。 类似地,以对象类型作为返回值时,编译器调用复制构造函数产生一个return语句中的值的副本返回到调用函数。 Point func(Point a) int main() { { Point A; Point b(a); func(A); return b; return 0; } } * 9.3.6 复制构造函数 (3)根据元素初始化式列表初始化数组元素时。 如果没有为类类型数组提供元素初始化式,则将用默认构造函数初始化每个元素。然而,如果使用常规的大括号的数组初值列表形式来初始化数组时,则使用复制初始化来初始化每个元素。 总的来说,正是有了复制构造函数,函数才可以传递对象和返回对象,对象数组才能用初值列表的形式初始化。 * 9.3.8 析构函数 析构函数(destructor)是类的另一个特殊成员函数,它的作用与构造函数相反,C++规定析构函数的名字是类名的前面加一个波浪号(~)。其定义形式为: 析构函数不返回任何值,没有返回类型,也没有函数参数。由于没有函数参数,因此它不能被重载。换言之,一个类可以有多个构造函数,但是只能有一个析构函数。 ~类名() { 函数体 } * 9.3.8 析构函数 1.何时调用析构函数 (1)对象在程序运行超出其作用域时自动撤销,撤销时调用该对象的析构函数。 (2)如果用new运算动态地建立了一个对象,那么用delete运算释放该对象时,调用该对象的析构函数。 * 9.3.8 析构函数 2.合成析构函数 与复制构造函数不同,编译器总是会为类生成一个析构函数,称为合成析构函数。 合成析构函数按对象创建时的逆序撤销每个非静态成员,即它是按成员在类中声明次序的逆序撤销成员的。对于类类型的每个成员,合成析构函数调用该成员的析构函数来撤销对象。 需要注意,合成析构函数并不删除指针成员所指向的对象,它需要程序员显式编写析构函数去处理。 * 9.3.8 析构函数 3.何时需要编写析构函数 许多类不需要显式地编写析构函数,尤其是具有构造函数的类不一定需要定义自己的析构函数。析构函数通常用于释放在构造函数或在对象生命期内获取的资源(如动态分配的内存)。 广义地讲,析构函数的作用并不仅限于释放资源方面,它可以执行任意操作,用来执行“对象即将被撤销之前程序员所期待的任何操作”。 如果类需要析构函数,则该类几乎必然需要定义自己的复制构造函数和赋值运算符重载,这个规则称为析构函数三法则(rule of three)。 * 9.3.8 析构函数 例9.4 设计一个类表示字符串,长度可以动态变化。 1 #include iostream 2 using namespace std; 3 class CString { 4 public: 5 CString(const char *str); //构造函数 6 ~CString(); //析构函数 7 void show() { coutpendl; } 8 private: 9 char *p; 10 }; 11 CString::CString(const char *str) 12 { 13 p=new char [strlen(str)+1]; 14 strcpy(p,str); * 9.3.8 析构函数 例9.4

文档评论(0)

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

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

1亿VIP精品文档

相关文档