class base
~base() = default;
virtual int getnum()
private:
int num;
};class derive : public base
~derive() = default;
//為虛函式,可以使用virtual修飾,也何以不使用,因為被定義為虛函式後在所有的派生類中都是虛函式。
//派生類中的虛函式的形參和返回型別必須和基類中的相同,除返回的是類本身的指標或引用外。
int getnum()
private:
int der_num;
};void shownum(base& base)
int main()
;struct str_b : str_a
;//使用final,則在之後的派生類中不能覆蓋基類中的該虛函式。
struct str_c : str_a
;struct str_d : str_c
;//虛函式可以擁有預設實參,派生類中的虛函式實參最好與基類中的一致,不然可能會出現問題。
//可以使用域作用符強行指定執行特定的版本的虛函式,避免了動態繫結。
derive *derive_1;
derive_1->base::getnum();
純虛函式
//乙個純虛函式無須定義
//在虛函式定義時,將其使用=0來定義,該虛函式就是純虛函式。
//=0只能出現在類內部的虛函式宣告語句處。
//virtual int fun(int) const = 0;
抽象基類
//含有純虛函式的類是抽象基類
//不能定義抽象基類的物件
struct str_chou
;//str_chou chou;//錯誤 str_chou為抽象基類
return 0;
}
純虛函式和抽象基類
純虛函式的格式 virtual 型別 函式名 參數列 0 而我們的純虛函式經常被用來構建抽象基類。抽象基類 當我們僅想對基類進行向上型別轉換,使用它的介面,而不希望使用者實際地建立乙個基類的物件,那麼我們就在基類中加入至少乙個純虛函式 pure virtual function 來使基類稱為抽象 a...
純虛函式和抽象基類
純虛函式就是基類只定義了函式體,沒有具體的實現過程,必須在子類中加以實現。如果基類中含有乙個或多個純虛函式,那麼它就屬於抽象基類,不能被例項化。1 引入抽象基類和純虛函式的原因有以下兩點 1 為了方便的是使用多型特性 2 在很多情況下,基類本身生成物件是不合情理的。抽象基類不能夠被例項化,它定義的純...
虛基類 虛函式 純虛函式和抽象類
一 虛基類 在 多繼承 中講過的例子中,由類a,類b1和類b2以及類c組成了類繼承的層次結構。在該結構中,類c的物件將包含兩個類a的子物件。由於類a是派生類c兩條繼承路徑上的乙個公共基類,那麼這個公共基類將在派生類的物件中產生多個基類子物件。如果要想使這個公共基類在派生類中只產生乙個基類子物件,則必...