C 抽象基類與虛基類(C primer)

2021-09-20 15:21:50 字數 626 閱讀 4455

c++ primer plus p508,抽象基類

c++ primer plus p556,虛基類

抽象基類是解決如下問題:

加入現在需要開發乙個圖形類,表示圓與橢圓(注意,圓是一種特殊的橢圓)。所以初步考慮從橢圓類中派生出圓類。但是現在遇到乙個問題,圓與橢圓的面積計算公式不同,所以需要建立乙個abc,抽象出圓與橢圓的共性,圓類、橢圓類都繼承abc。

圓類與橢圓類相異的方法(求面積)需要在abc中宣告成純虛函式

下面為純虛函式的宣告方式:

virtual double area() const = 0;
注意:

虛基類解決如下問題:

類b、c繼承類a;類d繼承類b、c;按照正常的公有繼承方式,類d中將包含2份類a的物件/方法。這樣浪費儲存空間,而且使用物件/方法時需要說明是從哪乙個父類繼承而來的。

所以繼承時將基類宣告成虛基類,同乙個虛基類的物件/方法,在子類中只會出現一次。

class b : public virtual a 

class c : virtual public a

虛基類的使用注意事項:

虛函式與抽象基類

當某個虛函式通過指標或者引用呼叫時,編譯器產生的 直到執行時才能確定應該呼叫哪個版本的函式,被呼叫的函式是與繫結到指標或引用上的物件的動態型別相匹配的那個。必須注意的是,動態繫結只有當我們通過指標或引用呼叫虛函式時才會發生。如果通過普通的型別 非引用非指標 的表示式呼叫虛函式時,編譯器就會將呼叫的版...

虛函式 虛基類 抽象類

一 虛基類 解決二義性,防止雙份拷貝間接基類。否則得用作用域分辨符來區分進行的多個拷貝 將共同基類設定為虛函式,這是從不同的路徑繼承過來的同名資料成員在記憶體中就只有乙個拷貝,同乙個函式名也只有乙個對映。虛基類的宣告是在派生類的定義過程中進行的,語法形式為 class 派生類名 virtual繼承方...

純虛函式與抽象基類

純虛函式 c 中可以定義這樣一類函式,這樣的函式可以沒有實現。我們把這樣的函式稱為純虛函式。純虛函式有什麼意義 通過它可以指明乙個虛函式只是提供了乙個可被子型別改寫的介面。純虛函式是在基類中宣告的虛函式,它可以在基類中有定義,而且派生類必須定義自己的實現方法。基類不能生成物件,可以使用指標或者引用派...