C++ 继承类,该如何解决

C++ 继承类
有四个类 A , B, C , D
A 是基类,B, C 都继承A, D是继承B ,C 的类;

我的写法是这样的:

#include<iostream>
using namespace std;

class A{
    public:
        int a;
        A(int n) {
              a = n;
              cout<<"A::a="<< a <<endl;
              }
};

class B:public A{
    public:
        int b;
        B(int a0 , int n) :A(a0){
              b = n;
              cout<<"B::b="<< b <<endl;
        }
};

class C: public A{
    public:
        int c;
        C(int a0, int n) :A(a0){
              c = n;
              cout<<"C::c="<< c <<endl;
        }
    };

class D: public B , public C   {
    public:
        int d;
        A(int a0 , int b0 , int c0 , int d0)  : B(a0,b0) , C(a0,c0){
// 上面的这一句出错了, 平时单继承的时候就是这样写的,这个不知道怎么
              d = d0;
              cout<<"D::d="<< d <<endl;
        }
};


注释里说的那样, 那里编译出错,哪位高手指点一下!!!(急需)
------解决方案--------------------
最后构造函数错了A(int a0 , int b0 , int c0 , int d0)  : B(a0,b0) , C(a0,c0)
应该是D{}啊 你写A了。
------解决方案--------------------

菱形继承。

#include <iostream>

using namespace std;

class A
{
public:
int a;
A(){}
A(int n) 
{
a = n;
cout<<"A::a="<< a <<endl;
}
};

class B: virtual public A{
public:
int b;
B(int a0 , int n) :A(a0){
b = n;
cout<<"B::b="<< b <<endl;
}
};

class C: virtual public A{
public:
int c;
C(int a0, int n) :A(a0){
c = n;
cout<<"C::c="<< c <<endl;
}
};

class D: public B , public C   {
public:
int d;
D(int a0 , int b0 , int c0 , int d0)  : A(a0),  B(a0,b0) , C(a0, c0)
{
d = d0;
cout<<"D::d="<< d <<endl;
}
};

int main()
{
D d(1, 2, 3, 4);

return 0;
}


------解决方案--------------------
用我的代码试一试, 如果不可以,说明是你编译器的问题。我的代码通过了vc 2012和g++
引用:
Quote: 引用:


菱形继承。


那里注意到了,不过有测试例子编译不行啊?


int main(int argc, const char *argv[])
{
    A* a = new A(1);
    delete a;
    cout << endl << endl;
 
    a = new B(2, 3);
    delete a;
    cout << endl << endl;
 
    a = new C(4, 5);
    delete a;
    cout << endl << endl;
 
 //   a = new D(6, 7, 8, 9);
 //   delete a;
 // 就是这个地方便易老出问题 怎么回事儿?
    getchar();
    return 0;



编译错误是这样说的:DEV-CPP\未命名2.cpp `A' is an ambiguous base of `D' 
怎么改进 啊?

------解决方案--------------------
引用:
1,类A 有必要写个不带参数的 A(){ }  吗?
2,class B: virtual public A{.....