虚基类用于多重继承
虚基类:
- 为了解决多重继承时对间接基类同一成员的多次继承,造成数据冗余。故而引入虚基类,其机制是,只保留一份数据(派生类直接从虚基类中继承数据)《不过其他数据还有只不过是屏蔽掉了
图解如下:
#include <iostream>
using namespace std;
class V
{
protected:
int value;
};
//虚继承
class A : virtual public V
{
public:
A(){
v = 10;
}
void disp() const{
cout << "in A::disp,v: " << v << endl;
cout << "in A::disp,value: " << value << endl;
}
protected:
int v;
// int value;
};
//虚继承
class B : virtual public V
{
public:
B(){
v = 20;
}
void disp() const{
cout << "in B,v: " << v << endl;
cout << "in B::disp,value: " << value << endl;
}
protected:
int v;
//int value;
};
class C : public A,protected B
{
public:
//派生类 从间接基类 直接继承
C():V(),A(),B(){
c = 9;
}
void show() const{
cout << "in C::show, c: " << c << endl;
cout << "value: " << value << endl;
cout << "&value: " << &value << endl;
// V::value
cout << "A::value: " << A::value << endl;
cout << "&A::value: " << &(A::value) << endl;
// V::value
cout << "B::value: " << B::value << endl;
cout << "&B::value: " << &(B::value) << endl;
}
private:
int c;
};
int main()
{
C c1;
cout << "sizeof(C): " << sizeof(C) << endl;
c1.show();
return 0;
}