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;
}
};
注释里说的那样, 那里编译出错,哪位高手指点一下!!!(急需) C++ 继承
[解决办法]
最后构造函数错了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++
[解决办法]
1,类A 有必要写个不带参数的A(){ } 吗?
2,class B: virtual public A{.....
}
class C: virtual public A{
.....
}
这里为什么把类A设成virtual 呢???
3,D(int a0 , int b0 , int c0 , int d0) : A(a0), B(a0,b0) , C(a0, c0) {
A 类的参数设置已经通过B,C做好了,为什么还要写个A(a0);
1. 默认构造函数不是必须的,可以删除.
2. 虚继承是为了避免菱形继承中重复继承. 这里 xxx: virtual public A{ //A成为虚基类
3. 虚拟继承是先构造虚基类(A),再构造其直接基类(B,C,此时B,C不会再构造A).
我们提倡简单的继承,要避免多重继承,虽然c++语言本身能支持。