【C++学习之路】派生类的构造函数(二)
二、有内嵌对象的派生类
1.一般来说,我们会这样定义构造函数
student( int i, string nam, int pid, string pnam, int sid) : person( i, nam),parent(pid,pnam){ stuid = sid; }
person是基类的构造函数,parent是该派生类内嵌的person子对象
2.具体例子
#include <iostream>
using namespace std;
class A
{
int dataA;
public:
A(int a) :dataA(a) { cout << "调用A的构造函数" << endl; }
};
class B :public A
{
int dataB;
A a1;
public:
B(int, int,int);
};
B::B(int a, int b, int c) :A(a), a1(b){ dataB = c; cout << "调用B的构造函数" << endl; }
void main()
{
cout << "***************************" << endl;
cout << "CRAZY_HENRY的演示:" << endl<< endl;
B b(, , );
}
执行结果:

进一步,无论参数表中的顺序怎么改变,只要是符合书写规范的,都是可以执行的,而且执行的顺序:(1)基类的构造函数 (2)内嵌基类对象的派生类 (3)派生类新增的数据成员 (4)函数体
比如,下边这条语句完全打乱了最初的顺序:
B::B(int a, int b, int c) :dataB(c), a1(b),A(a){ cout << "调用B的构造函数" << endl; }
3.三个类之间的继承和内嵌
上边分析的是两个类之间的继承和内嵌,其实也是一样的:
#include <iostream>
using namespace std;
class A
{
int dataA;
public:
A(int a) :dataA(a) { cout << "调用A的构造函数" << endl; }
};
class C
{
int dataC;
public:
C(int c) :dataC(c){ cout << "调用C的构造函数" << endl; }
};
class B :public A
{
int dataB;
C c1;
public:
B(int, int,int);
};
B::B(int a, int b, int c) :dataB(b), c1(c), A(a){ cout << "调用B的构造函数" << endl; } void main()
{
cout << "***************************" << endl;
cout << "CRAZY_HENRY的演示:" << endl<< endl;
B b(, , );
}

但是,有一点一定要特别注意,在定义B之前,一定要在格式上把C的定义写在B的前边,否则,B的C的内嵌对象是无法识别出来的!
4.同时内嵌多个对象的时候,也存在显式调用对象的构造函数和隐式调用对象的构造函数的情况,详细分析我在另一篇有关组合类的构造函数里写过博文里写过
【C++学习之路】派生类的构造函数(二)的更多相关文章
- 【C++学习之路】派生类的构造函数(三)
三.多层继承的派生类 1.多层继承的派生类只需在构造函数的初始化列表中写出直接基类的构造函数即可 class student { public: student(int n, string nam) ...
- 【C++学习之路】派生类的构造函数(一)
一.简单派生类的构造函数 1.所谓简单派生类,就是指派生类中不包含基类的内嵌对象的派生类. 2.一般来说,这样的派生类的构造函数的形式是: student( int i, string nam, in ...
- C++学习之路—继承与派生(二):派生类的构造函数与析构函数
(根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 由于基类的构造函数和析构函数是不能被继承的,所以 ...
- C++学习17派生类的构造函数
基类的构造函数不能被继承,在声明派生类时,对继承过来的成员变量的初始化工作也要由派生类的构造函数来完成.所以在设计派生类的构造函数时,不仅要考虑派生类新增的成员变量,还要考虑基类的成员变量,要让它们都 ...
- C++学习笔记(6)----基类和派生类的构造函数和析构函数的执行顺序
基类和派生类:构造函数和析构函数的执行顺序 在Visual Studio中,新建控制台工程,构造类如下: #include<iostream> using namespace std; c ...
- c++学习笔记4,派生类的构造函数与析构函数的调用顺序(一)
測试源代码: //測试派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace ...
- 【C++ Primer 第15章】定义派生类拷贝构造函数、赋值运算符
学习资料 • 派生类的赋值运算符/赋值构造函数也必须处理它的基类成员的赋值 • C++ 基类构造函数带参数的继承方式及派生类的初始化 定义拷贝构造函数 [注意]对派生类进行拷贝构造时,如果想让基类的成 ...
- 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成员)
[源码下载] 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成 ...
- C++:派生类的构造函数和析构函数
4.2 派生类的构造函数和析构函数4.2.1 派生类构造函数和析构函数的执行顺序 通常情况下,当创建派生类对象时,首先执行基类的构造函数,随后再执行派生类的构造函数:当撤销派生类对象时,则先执行派生类 ...
- 【C++继承与派生之二】有子对象的派生类的构造函数
这是我今天看书刚刚看到的,觉着以前对这一块内容了解不多,所以整理一下分享给大家.首先要介绍一下子对象的概念.类的数据成员不仅可以是int.char这样的基本类型,也可以是类对象,如可以包含这样的数据成 ...
随机推荐
- 如何在一台机子上启动两个TOMCAT
同时启动两个tomcat设置,具体如下: 1.不要设置CATALINA_HOME 2.分别修改安装目录下的conf子目录中的server.xml文件: a.修改http访问端口为不同的端口,将8080 ...
- 转:微博"收藏/赞/转发"技术资料汇总
书籍 HTTP权威指南 <- @Fenng Introduction to Information Retrieval <- @陈利人 Lua 源码欣赏 <- @简悦云风 The A ...
- CONTEXT MENU简介
安卓中的上下文菜单是通过长按控件元素触发的,要注意的是每次都会触发onCreateContextMenu方法: main.xml <?xml version="1.0" en ...
- 可以把一些常用的方法,写入js文件,引入html界面
这样,可以在多处应用.更好一些.缺点是不够灵活. 优点是,一处修改,多处应用. 函数这东西,一般都是先加载的,之后就可以随便调用了. function delquestion(obj){ //conf ...
- POJ1836 Alignment(LIS)
题目链接. 分析: 从左向右求一遍LIS,再从右向左求一遍LIS,最后一综合,就OK了. 注意: 有一种特殊情况(详见discuss): 8 3 4 5 1 2 5 4 3 答案是:2 AC代码如下: ...
- TF31003错误的解决办法
TF31003错误的解决办法 在今天上午机器重新启动后,VS2012突然无法连接TFS2010了.在机器重新启动之前还使用正常.刚开始以为TFS出现了问题,不过其他小组同事使用却正常,问题应该在我 ...
- 3D效果导航代码
*, *:before, *:after { padding:; margin:; box-sizing: border-box; } .menu { list-style: none; width: ...
- ehcache报错ERROR n.s.e.store.disk.DiskStorageFactory - Disk Write的解决办法
23:53:44 ERROR n.s.e.store.disk.DiskStorageFactory - Disk Write of com.koal.**.**.**.**.**.***Impl$$ ...
- (Relax 水题1.2)POJ 1032 Parliament(将n分解成若干个互不相等的整数的和,并且是这些整数的乘积最大)
题意:给出一个数n,将其拆分为若干个互不相等的数字的和,要求这些数字的乘积最大. 分析:我们可以发现任何一个数字,只要能拆分成两个大于1的数字之和,那么这两个数字的乘积一定大于等于原数.也就是说,对于 ...
- [置顶] ios 水果连连看游戏源码
原创文章,转载请注明出处:http://blog.csdn.net/donny_zhang/article/details/9251917 demo功能:水果连连看游戏源码.iphone6.1 测试通 ...