A-A+
有以下程序: included<iostream> using namespace std;
问题详情
有以下程序:
included<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
20 解析:本题考核虚基类。本题中,虽然Derived 1和Derived 2都是由共同的基类x派生而来的,但由于引入虚基类,使得它们分别对应基类的不同副本。这时数据成员x只存在一份拷贝,不论在类Derired 1中修改,还是在类Derived 2中修改,都是直接对这唯一拷贝进行操作。本题程序执行语句“Derived obj;”时,就会先调用虚基类Base的构造函数,使得x=0,然后执行类Derived 1的构造函数使得x=10,再执行类Derived 2的构造函数,使得x=20。最后输出x的值为20。