C++ 虛基類簡單使用
阿新 • • 發佈:2018-12-31
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的建構函式最先被呼叫,而且只被呼叫了一次,說明子類中只包含了一個該基類的複本。
虛基類的特性就從這段程式碼的執行結果中一目瞭然了。