#include
using namespace std;
class B1
{
public:
B1(int i) {cout<<"constructing B1"<};
class B2
{
public:
B2(int j) {cout<<"constructing B2"<
class B3
{
public:
B2() {cout<<"constructing B3 *"endl}
};
class C:public B2,public B1,public B3
{
public:
C(int a,int b,int c,int d):
B1(a),memberB2(d),menmberB1(c),B2(b){}
private:
B1 memberB1;
B2 memberB2;
B3 memberB3;
};
int main()
{
C obj(1,2,3,4)
}
本题知识点:构造函数 类的继承
提示:本题主要掌握 派生类中构造函数的调用顺序 是应聘过程中c++的必考知识点 必须掌握
运行本题后得到的结果是:
constructing B2 2
constructing B1 1
constructing B3 *
constructing B1 3
constructing B2 4
constructing B3*
( “当对象被创建时调用构造函数” “构造函数的调用顺序是:先构造基类 按基类在派生类的声明顺序子左至右 然后构造内嵌函数 最后构造派生类 ”)
根据以上规则 主函数运行后 先调用 B2 然后 B1 ,B3 而B2,B1都是有参函数 所以将obj(1,2,3,4)中的参数1 , 2 传送到B1 B2 中 B3是无参函数所以直接输出, 这样就得到结果的前三行 运用过的规则是 【先构造基类 按基类在派生类的声明顺序子左至右】
然后 调用内嵌成员 memberB1 memberB2 memberB3 根据 B1(a),memberB2(d),menmberB1(c),B2(b){}此处的声明 将参数串入内嵌函数 得到后三行的结果 派生类C的构造函数也运行了 但只是没有输出
至此 整个程序结束
return 于 2010-09-30 15:05:42发表:
学习下