问题
单项选择题
有如下程序: #include <iostream> using namespace std; class x { protected:int a; public:x() { a=1; } }; class x1 : virtual public x { public:x1(){ a+=1; cout<<a;} }; class x2 : virtual public x { public:x2 (){ a+=2; cout<<a;} }; class y : public xl,public x2 { public:y() { cout<<a<<end1; } }; int main () {y obj;return O; } 该程序运行后的输出结果是( )。
A.1
B.123
C.242
D.244
答案
参考答案:D
解析: 本题程序中引入了虚基类。在主函数中,执行语句“y obj;”时,先执行虚基类x的构造函数,使a=1,然后执行类x1的构造函数,使a=2,并输出值2。再执行类x2的构造函数,使a=4,并输出值4。最后执行类y的构造函数,输出值4。