虛函式和虛擬基類 用法小結

2021-06-20 23:28:35 字數 1412 閱讀 3065

虛繼承:在繼承定義中包含了virtual關鍵字的繼承關係;

虛基類:在虛繼承體系中的通過virtual繼承而來的基類;

宣告虛基類的一般形式為

class 派生類名: virtual 繼承方式 基類名

需要注意: 為了保證虛基類在派生類中只繼承一次,應當在該基類的所有直接派生類中宣告為虛基類。否則仍然會出現對基類的多次繼承。

將類a宣告為虛基類,方法如下:

class a//宣告基類a

;class b :virtual public a//宣告類b是類a的公用派生類,a是b的虛基類

;class c :virtual public a//宣告類c是類a的公用派生類,a是c的虛基類;虛

繼承 demo 參考來自:

虛基類:

用於某類從多個類繼承,這多個基類有共同基類時,這個最上層基類的成員會多次在最終派生類出現而產生二義性,為避免二義性,使得最終派生類中,最上層的基類成員只有乙份,這時需要虛擬繼承,該最上層類就是虛基類,需要注意的是,該類在第一層派生時就要虛擬繼承才行,使用方法是在繼承方式前加上乙個 virtual就可以了

#include using namespace std;

class cbase

~cbase() };

class cderive1: virtual public cbase

~cderive1()

int geta() };

class cderive2: virtual public cbase

~cderive2()

int geta() };

class cderive12: public cderive1,public cderive2

~cderive12() };

void main()

效果:

虛基類 虛擬繼承 虛函式?

前幾天師兄想考我什麼是虛基類的時候,我說是因為多重繼承中,如果出現菱形繼承 multiple inheritance diamond 不想要末端派生類有兩份最底層基類的資料的話,就得用虛擬繼承。結果居然被懟了,說我說的啥玩意兒?我還以為我記錯了,實際上是他把虛基類和含有虛函式的基類給混淆了。今天讀了...

虛基類 虛函式和純虛基類

首先看乙個例子 class base class child1 public base class child2 public base void main else p print 函式呼叫的時候,檢視虛表,根據p的位址首先從虛表裡面查詢要呼叫的函式 這裡呼叫child2的print 函式 ret...

虛擬繼承,虛基類

文章出處 http blog.csdn.net skylor archive 2009 03 26 4025698.aspx 虛擬繼承與虛基類實際上是說了同一件事,只是不同的書表達不同,在這裡還是推薦虛擬繼承這種說法 因為總有人問虛基類是什麼,這裡可以解釋為虛基類就是虛擬繼承,一種繼承的方式,有的書...