C 虛基類 虛擬繼承

2021-05-22 16:40:22 字數 607 閱讀 6737

虛基類建構函式的引數必須由最新派生出的類負責初始化,即使不是直接繼承,

示例程式的虛基類的建構函式只執行一次:

#include

#include

#include

using namespace std;

class base

};class base1 : virtual public base

};class base2 : virtual public base

class derived : public base1, public base2

};int  main ()

在derived建構函式中,如果沒有base(x1)將報錯,因為derived的直接基類中有虛繼承base的,且base的建構函式是有引數的,可以形象的理解為「 derived繼承了base 」 ,所以需要在初始化列表中對父類初始化。

程式執行結果 :

constructing base ,  x = 1

constructing base1 ,  y = 2

constructing base2 ,  z = 3

constructing derived,  xyz = 4

虛擬繼承,虛基類

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

虛基類 虛擬繼承 虛函式?

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

虛基類與虛擬繼承

虛擬繼承 顧名思義就是繼承了但不給開闢空間 class b0 此段 中b0就是虛基類 public int m class b1 virtual public b0 b1虛擬繼承b0 public int n class b2 virtual public b0 b2虛擬繼承b0 public in...