多继承就是一个类有多个直接基类的继承关系被称为多继承关系
一个派生类对象拥有多个直接或间接基类的成员。不同名成员访问不会出现二义性。
如果不同的基类有同名成员,派生类对象访问时应该加以识别。
例如:
class A
{
public:
int a;
int d;
};
class B {
public:
int b;
int d;
};
class C: public A,public B{
public:
int c;
int d;
};
void main()
{
C c;
c.a = 1;
c.b = 2;
c.c = 3;
c.A::d = 4;
c.B::d = 5;
c.d = 6;
}
如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中明
的名字进行访问时,可能产生二义性
为了使这个公共基类在派生类中只产生一个子对象,必须对这个基类声明为虚继承,使
这个基类成为虚基类。虚继承声明使用关键字“virtual”
class B
{
public:
int b;
};
class B1:virtual public B{
public:
int b1;
};
class B2: virtual public B{
public:
int b2;
};
class C :public B1, public B2 {
private:
};
void main()
{
C c;
c.b;
}
由于类C的对象中只有一个B类子对象,名字b被约束到该子对象上,所以当以不同
路径使用名字b访问B类的子对象时,所访问的都是那个唯一的基类子对象。即
c.B1::b;和c.B2::b;
引用是同一个基类B的子对象。