1. 程式人生 > >C++ 虛基類簡單使用

C++ 虛基類簡單使用

1、概述

       虛基類是用關鍵字virtual宣告繼承的父類,即便該基類在多條鏈路上被一個子類繼承,但是該子類中只包含一個該虛基類的備份,這也是虛基類的作用所在。

       正是由於虛基類的這個作用,所以在每個子類的建構函式中必須顯示的呼叫該虛基類的建構函式,不管該虛基類是不是直接的父類。

       其次,虛基類的建構函式的呼叫早於其他非虛基類的建構函式的呼叫。

       上面兩點就是虛基類的特性。

2、程式碼示例

       我們來看一段簡單的程式碼,體現虛基類的這兩個特性。

#include <iostream>
#include <cstdio>
using namespace std;

class Base
{
public :
    int base;
    Base(int a = 0)
    {
        this->base = a;
        cout<<"Base Constructer "<<a<<endl;
    }
};

class A : public virtual Base
{
public :
    int a;
    A(int a, int b):a(a), Base(b)
    {
        cout<<"A Constructer"<<endl;
    }
};

class B : public virtual Base
{
public :
    int b;
    B(int a, int b) : b(a), Base(b)
    {
        cout<<"B Constructer"<<endl;
    }
};

class C : public B, public A, public virtual Base
{
public :
    int c;
    C(int a, int b, int c, int d, int e) : A(a, b), B(c, d), Base(e)
    {
        cout<<"C Constructer"<<endl;
    }
};

int main()
{
    C c(1, 2, 3, 4, 5);
    return 0;
}

程式執行結果:

       我們看到最後一個子類C顯式的呼叫了虛基類的建構函式,這個是必須的。

       然後就是雖然虛基類在最後一個宣告,但是Base的建構函式最先被呼叫,而且只被呼叫了一次,說明子類中只包含了一個該基類的複本。

       虛基類的特性就從這段程式碼的執行結果中一目瞭然了。