多继承的构造顺序
来源:互联网 发布:北京碧水源 知乎 编辑:程序博客网 时间:2024/05/21 10:15
(1)任何 虚拟基类的构造函数按照它们被继承的顺序构造;(#add 即声明顺序)
(2)任何非虚拟基类的构造函数按照它们被继承的顺序构造;
(3)任何成员对象的构造函数按照它们声明的顺序调用;
(4)类自己的构造函数。
例如:
//**********************
//** ch17_4.cpp **
//**********************
#include<iostream.h>
class OBJ1
{
public:
OBJ1(){ cout <<"OBJ1\n"; }
};
class OBJ2
{
public:
OBJ2(){ cout <<"OBJ2\n"; }
};
class Base1
{
public:
Base1(){ cout <<"Base1\n"; }
};
class Base2
{
public:
Base2(){ cout <<"Base2\n"; }
};
class Base3
{
public:
Base3(){ cout <<"Base3\n"; }
};
class Base4
{
public:
Base4(){ cout <<"Base4\n"; }
};
class Derived :public Base1, virtual public Base2,
public Base3, virtual public Base4
{
public:
Derived() :Base4(), Base3(), Base2(),
Base1(), obj2(), obj1()
{
cout <<"Derived ok.\n";
}
protected:
OBJ1 obj1;
OBJ2 obj2;
};
void main()
{
Derived aa;
}
运行结果为:
Base2
Base4
Base1
Base3
OBJ1
OBJ2
Derived ok.
Derived的虚基类Base2和Base4最先构造,尽管它在Derived类中出现的顺序不在最前面;Derived的非虚基类其次构造,不管它在Derived构造函数中出现的顺序如何;Derived的组合对象obj1和。obj2随后构造, 它以类定义时,数据成员排列顺序为准, 不管在Derived构造函数中出现顺序怎样;最后是Derived类构造函数本身。
->在语言中实现多继承并不容易,这主要是编译程序问题,还有模糊性问题。建议你如果可能,在进一步阅读有关参考书之前,尽量避免用多重继承。单个继承提供了足够强大的功能,不一定非用多重继承不可。我们应先学会阅读一些商品化的类库源程序中有关多重继承的部分,因为那些都是经过测试的安全代码。
- 多继承的构造顺序
- 多继承的构造顺序
- 多继承的构造顺序
- 多继承构造顺序
- 多继承中的构造函数的顺序
- 多继承 类的构造的调用顺序
- 多继承时的构造函数调用的顺序
- 继承树的构造器调用顺序
- JAVA 继承 构造函数的执行顺序
- 演示继承的构造函数执行顺序
- JAVA 继承 构造函数的执行顺序
- 【java】构造函数的继承执行顺序
- java继承的构造函数调用顺序
- 继承下构造函数的执行顺序
- c++多重继承的构造执行顺序
- C++多继承构造函数调用顺序
- C++多继承构造函数执行顺序
- 虚继承 构造顺序
- JSON 格式详解
- 飞鱼效果
- spring应用中web.xml的设置
- 疯狂的IT人整理Apache、Tomcat集群和负载均衡
- vb两位数相乘程序
- 多继承的构造顺序
- otl通过myodbc连接mysql
- linux定时任务的设置
- 2012-03-28-1
- 使用git 工具下载android.jar源码
- 求两个整数的乘积
- 设置工厂日历
- Const,Const函数,Const变量,函数后面的Const
- 浅析ObjectiveC 深浅拷贝学习