c++的封裝、繼承和多型三大特性,封裝沒什麼好說的,就是把事務屬性和操作抽象成為類,在用類去例項化物件,從而物件可以使用操作/管理使用它的屬性。
至於繼承,和多型密不可分。基類可以進行派生,而派生類則是繼承基類或稱父類,把基類中屬性和方法拿過來,變成自己的一部分,其中需要較為精細的思考。
多型則是一種實現多種使用的手法,這樣的說法不太準確。靜態多型(編譯時多型)我覺得是函式過載,不再贅述了,要注意的是過載函式的二義性(ps.tencent interview teg)。動態多型/執行時多型,又稱動態繫結。動態繫結的基礎是虛函式和使用基類指標或引用呼叫基類函式,只要用virtual宣告了虛函式,那麼它的呼叫物件就要執行時才能確定。它的實現機制在《深度探索物件模型》中有較為晦澀的解釋。
基類指標或是引用呼叫虛函式會發生執行時繫結,但是非虛函式則不會,還是編譯時繫結,它的動態型別和靜態型別是一致的。
虛函式宣告尾連線 「= 0」 是的該該虛函式成為純虛函式,作為介面,供派生類覆蓋實現。
含有純虛函式的類是抽象類,不能進行例項化,只能作為基類供子類繼承以實現宣告的純虛函式。
(例項化抽象類的錯誤資訊)
乙個例子
1 #include 2private:僅類內可見,其他不可見;using
namespace
std;34
//抽象基類
5class
abstract6;
1718
//派生類
19class son : public
abstract20;
2930
void son::set(string
_name)
3136
37string son::get() const
3841
42int
main()
43
protected : 類內可見,派生類可見;
public:都可訪問。
一般我們把基類的析構函式設定成為虛函式,且採用預設實現的版本。
是為了避免,使用動態繫結時,基類指標指向派生類物件並進行析構時,採用(靜態型別)基類析構函式而出現錯誤的情況。
c 虛函式,虛表相關總結
物件導向,從單一的類開始說起。class a 這個類中有兩個成員變數,都是int型別,所以這個類在記憶體中占用多大的記憶體空間呢?sizeof a 8個位元組,乙個int占用四個位元組。下圖驗證 這兩個資料在記憶體中是怎樣排列的呢?原來是這樣,我們根據debug出來的位址畫出a物件在記憶體的結構圖 ...
C 虛函式相關總結(入門)
c 的虛函式牽涉到了其c 的特性 多型性 一 在這裡回顧c 語言的三大特性 封裝 繼承和多型。封裝可以隱藏實現細節,使得 模組化,繼承可以拓展已存在的模組。目的都是為了 重用,而多型是為了介面重用。多型是通過虛函式實現的 a.封裝 把過程和資料封裝起來,決定哪些特性是可見的,哪些特性是隱藏的,保證了...
虛函式相關討論
下列關於虛函式相關說法正確的有?1 多型是通過虛表實現的 2 建構函式可以宣告為虛函式 x 3 析構函式不可以宣告為虛函式 x 4 抽象類中至少包含乙個純虛函式 c 中 的虛函式的作用主要是實現了多型的機制。而虛函式是通過虛函式表 v table 實現的。建構函式為什麼不能宣告為虛函式?1 構造乙個...