C++中的虚基类

来源:互联网 发布:测试常用的linux命令 编辑:程序博客网 时间:2024/04/30 21:12

我们知道类具有三大特性:封装、继承和多态。继承,可以在现有类的功能上进一步扩展,而无需在构建新的类。但有时多重继承会使结构变得复杂,不注意的话还会引起二义性。其中比较典型的一个案例:

class A{  public: int a; };class B: public A{};class C: public A{};class D: public B, public C{};
那么此时如果我们声明一个D类的对象:

int main(){    D d;    d.a = 0;    //错误,无法区分是从B还是C继承来的a    d.B::a = 0; //正确    d.C::a = 0; //正确}
因此,很容易出现混淆和错误。然而如果我们设定类A为虚基类,则就不用再去区分是从哪条路径继承来的a值了。即:

class A{  public: int a; };class B: virtual public A  // A是B的虚基类{};class C: virtual public A  // A是C的虚基类{};class D: public B, public C{};
此时就可以直接调用 d.a= 0;了。

C++提供虚基类的方法,使得在继承间接共同基类是只保留一份成员。(C++程序设计)

0 0
原创粉丝点击