一组合二继承和派生三派生类的声明和对象定义.ppt
《一组合二继承和派生三派生类的声明和对象定义.ppt》由会员分享,可在线阅读,更多相关《一组合二继承和派生三派生类的声明和对象定义.ppt(26页珍藏版)》请在三一办公上搜索。
1、1,一、组 合二、继承和派生三、派生类的声明和对象定义,第18章 组合和继承,2,一、组 合1.组合的概念 C+中组合是指结构和类的声明嵌入结构变量或对象作为其成员的现象。嵌入的对象成员亦称为成员对象,包容这个成员对象的类可称为组合类或包容类。当构造一个组合类的对象时,系统首先为每一个数据成员分配内存空间,仅当其中的成员对象获得完备的内存时才导致组合类实例的诞生。编译器先调用嵌入对象的构造函数,然后调用组合类的构造函数。,3,嵌入对象所隶属的类或嵌入类对应既定的事物,组合类对应某种新生的事物。C+中一个重要的思想是先构造既定的对象,然后构造新生的对象。这也适应继承的情况,先构造基类再构造派生类
2、。但析构的次序与构造相反,先诞生的对象后撤离内存空间。对象的构造和析构遵循堆栈空间先进后出的原理。,4,2.引用型成员和const成员 类中允许存在引用型数据成员和const数据成员。引用应依附于另一个独立的变量,等待及时的初始化。Const数据成员是仅仅初始化一次其值便不再改变的数据成员。对于存在const型的不变成员或引用型成员,系统提供的缺省的赋值运算符函数不起作用。引用型成员和不变成员只能借助冒号语法初始化。,5,当基于内存数据共享而设置引用型成员的时候,应注意引用型成员应关联到一个具有独立的生存期长或等长的同类型变量。具有const成员的对象预埋一个不变的成员,这样的类是一个奇怪的类
3、,因此编编程时应仔细加以处理。下面的例子为简单见嵌入一个内置int类型的引用型成员和不变成员,通过该例说明构造函数初始化列表的语法格式。,6,例 CType内含int类型的引用型成员和const成员#include static int numc=0;class CType public:CType(int x=1,int y=2);CType:CType();private:int n;const int c;public:int,7,CType:CType(int x,int y):r(y),c(x)n=x;printf(%d.n=%d,r=%d CType(int,int);,+numc
4、,n,r);CType g;void main()printf(Enter into main()n);CType x(3,4);printf(x.r=%dn,x.r);printf(Go outof main()n);,8,/程序运行输出结果:1.n=1,r=2 CType(int,int);Enter into main()2.n=3,r=4 CType(int,int);x.r=4 2.n=3,r=4199100 CType:CType();Go outof main()1.n=1,r=-858993460 CType:CType();此题输出一个不可靠的结果。原因在于:y是一个函数入口
5、堆栈空间的局部变量,r是一个生存期由对象控制的引用型成员。将引用型成员关联到生存期短的局部变量是危险的。,9,3.嵌入对象的初始化 嵌入对象所属类最好存在显式或隐含的可访问的缺省构造函数,从而可被编译器自动隐含调用。下面的规则描述嵌入对象显式的初始化:a.组合类的构造函数显式调用嵌入对象自身的带参构造函数,这一调用是通过冒号初始化语法进行的。b.嵌入对象按照其在组合类中的声明次序调用自身的构造函数,而不是冒号语法列表中出现的次序。c.嵌入对象的构造函数对于组合类是可访问的,可访问的含义是或者嵌入对象的构造函数是公共的,或者组合类声明为嵌入类的友员类等。,10,例 嵌入类和组合类的对象生灭#in
6、clude static int num=0;class CEmbed public:int n;CEmbed(int,int);private:int,11,class CContain public:CEmbed a;CContain(int x=1,int y=2);private:const CEmbed b;CContain:CContain(int x,int y):b(y,y),a(x,x)printf(%d.a=%d,b=%d,CContain(int,int);n,+num,a.n,b.n);void main()CContain z(3,4);/输出:1.n=3,CEmbe
7、d(int,int);2.n=4,CEmbed(int,int);3.a=3,b=4,CContain(int,int);,12,4.冒号初始化语法 冒号初始化是对象定义时调用构造函数进行初始化的一种方式。构造函数冒号初始化语法的一般格式为:类名:类名(形参列表):引用型成员(左值),嵌入对象(实参列表),const型成员(右值),.其它成员初始化;例如:CEmbed(int x,int y):m_r(n).CContain(int x,int y):a(x,x),b(y,y).,13,该语法的格式是在类的构造函数表题头后紧跟冒号“:”,冒号之后是成员对象的构造函数初始化调用列表,各列表分项之
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一组 继承 派生 声明 对象 定义

链接地址:https://www.31ppt.com/p-5503556.html