欢迎来到天天文库
浏览记录
ID:59473450
大小:197.60 KB
页数:39页
时间:2020-09-14
《华中科技大学c++复习课ppt课件.pptx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、复制构造函数隐含的复制构造函数使用:当函数的形参是类对象,调用函数时,进行形参与实参结合时使用。这时要在内存新建立一个局部对象,并把实参复制到新的对象中。2.当函数的返回值是类对象,函数执行完成返回调用者时使用。理由也是要建立一个临时对象,再返回调用者。因为局部对象在离开建立它的函数时就消亡了,不可能在返回调用函数后继续生存,所以编译系统会在调用函数的表达式中创建一个无名临时对象,该临时对象的生存周期只在函数调用处的表达式中。所谓return对象,实际上是调用复制构造函数把该对象的值拷入临时对象。如果返回的是变量,处
2、理过程类似,只是不调用构造函数。成员对象与构造函数聚合(aggregation):类中的成员,除了成员数据和成员函数外,还有成员对象,即用其他类的对象作为类的成员。使用成员对象的技术称为聚合。成员对象是实体,系统不仅为它分配内存,而且要进行初始化。【例4.6】含有成员对象的类的构造函数成员对象与构造函数含对象成员的构造函数:类名::构造函数名(参数总表):对象成员1(参数名表1),对象成员2(参数名表2),……对象成员n(参数名表n){……}冒号后用逗号隔开的为要初始化的对象成员,附在后面的参数名表1,…,参数名表n
3、依次为调用相应对象成员所属的构造函数时的实参表。这些表中的参数通常来自冒号前的参数总表,但没有类型说明。含对象成员的类对象的初始化时,首先依次自动调用各成员对象的构造函数,再执行该类对象自己的构造函数的函数体部分。各成员对象的构造函数调用的次序与类定义中说明的顺序一致,而与它们在构造函数成员初始化列表中的顺序无关。成员对象与构造函数含对象成员的析构函数:因为析构函数没有参数,所以包含成员对象的类的析构函数形式上并无特殊之处。但是撤销该类对象时,会首先调用自己的析构函数,再调用成员对象的析构函数,调用次序与初始化时的次
4、序相反。成员对象与构造函数构造函数另一格式:对于不含对象成员的类对象的初始化,也可以套用以上的格式,把部分需要直接赋初值的变量初始化写在冒号的右边:类名::构造函数名(参数表):变量1(初值1),……,变量n(初值n){……}当然也可以把一部分变量重新放回花括号中的函数体。冒号以后部分实际是函数体的一部分,所以在构造函数的声明中,冒号及冒号以后部分必须略去。成员对象与构造函数构造函数和析构函数的调用规则:1.对全局定义的对象,当程序进入入口函数main之前 对象就已经定义,那时要调用构造函数。整个程序结束时调用析构
5、函数。2.对于局部定义的对象,每当程序控制流到达该对象定义处时,调用构造函数。当程序控制走出该局部域 时,则调用析构函数。3.对于静态局部定义的对象,在程序控制首次到达该对象定义处时,调用构造函数。当整个程序结束时调 用析构函数。成员对象与构造函数在正确定义了构造函数和析构函数的前提下,在一个健康的程序中,每个创建的对象必然有一个而且只有一个撤消动作。注意:先建立的对象后撤销。【例4.7】演示对象创建和撤消的对应关系演示对象创建和撤消的对应关系本例目的是总结一下语法,请注意各函数输出的标志:classcomple
6、x{private:doublereal,image;public:complex(){//默认的构造函数real=0.0;image=0.0;cout<<"Initializing00"<7、r"<8、x(complex&com);//复制的构造函数声明~complex(){//析构函数cout<<"Destructor"<
7、r"<8、x(complex&com);//复制的构造函数声明~complex(){//析构函数cout<<"Destructor"<
8、x(complex&com);//复制的构造函数声明~complex(){//析构函数cout<<"Destructor"<
此文档下载收益归作者所有