注册 登录
编程论坛 C++教室

一道二级的题目

小编程员 发布于 2009-08-10 21:07, 374 次点击
#include<iostream>
using namespace std;
class Base
{
public:
    Base(){x=0;}
    int x;
};
class Derived1:virtual public Base
{
public:
    Derived1(){x=10;}
};
class Derived2:virtual public Base
{
public:
    Derived2(){x=20;}
};
class Derived:public Derived1,protected Derived2
{};
int main()
{
    Derived obj;
    cout<<obj.x<<endl;
    return 0;
}
输出结果是20,我想知道原因,请大大们给我解释。
3 回复
#2
xufen3402009-08-10 21:33
class Derived:public Derived1,protected Derived2 ,
所以生成对象obj时会调用父类的默认构造函数,顺序Base()-〉Derived1-〉Derived2(注意顺序),x最终变成了20。
学习了
#3
平凡不在2009-08-10 23:30
回复
class Derived:public Derived1,protected Derived2 ,由此可知,Derived是共有继承Derived2,所以,生成对象obj时调用的是Derived2的构造函数
#4
平凡不在2009-08-11 01:10
回复
对不起,上面的写错了,现在修改如下:class Derived:public Derived1,protected Derived2 ,由此可知,Derived是保护继承Derived2,所以,生成对象obj时调用的是Derived2的构造函数
1