求解一道C++编程题

来源:百度知道 编辑:UC知道 时间:2024/06/16 03:12:12
#include<iostream.h>
class A
{
protected:
int a;
public:
A() {a=1;cout<<"inntializing A."<<endI;}
};
class D1:virtual public A
{
public:
D1() {a=a+1;}
};
class D2:virtual public A
{ public:
D2() {a=a+3;}
};
class B:public D1,public D2
{
public:
B() { }
void show() {cout<<"a="<<a<<endI;}
};
void main()
{
B b;
b.show();
return;
}

将endl改正后就可以运行了。
当定义b时,程序自动调用D1,D2的构造函数。当调用D1时又要调用A的构造函数a=1.然后调用D1构造函数,a变为2.(由于这些类都是继承的关系,所以变化的a被存储下来了)。当继续调用D2时,a的初值已经是2了,调用完毕后a的值为5.
所以最后由B继承下来的a是5,再由show()函数输出。

有什么问题吗? 除了endl的最后一个字母打错了以外还想要说明什么?