物件導向,從單一的類開始說起。
class a
;這個類中有兩個成員變數,都是int型別,所以這個類在記憶體中占用多大的記憶體空間呢?
sizeof(a), 8個位元組,乙個int占用四個位元組。下圖驗證:
這兩個資料在記憶體中是怎樣排列的呢?
原來是這樣,我們根據debug出來的位址畫出a物件在記憶體的結構圖
如果 class a 中包含成員函式呢? a 的大小又是多少?
class a
private:
int m_a;
int m_b;
};直接告訴你答案,類的成員函式多大? 沒人能回答你,並且不是本文的重點,類的成員函www.cppcns.com數是放在**區的,不算在類的大小內。
類的物件共享這一段**,試想,如果每乙個物件都有一段**,光是儲存這些**得占用多少空間?所以同乙個類的物件共用一段**。
共用同一段**怎麼區分不同的物件呢?
實際上,你在呼叫成員函式時,a.func1() 會被編譯器翻譯為 a::func1(&a),也就是a* const this, this 就是 a 物件的位址。
所以根據this指標就能找到對應的資料,通過這同一段**來處理不同的資料。
接下來我們討論一下繼承,子類繼承父類,將會繼承父類的資料,以及父類函式的呼叫權。
以下的測試可以驗證這個情況。
class a
;class rectangle : public shape
return 0;
}有些話是大白話,哈哈,如果這篇文章寫的不錯,解決了你的疑惑的話,點個贊再走吧!
不對的地方也請指出來,大家一起學習進步。
C 虛函式相關總結(入門)
c 的虛函式牽涉到了其c 的特性 多型性 一 在這裡回顧c 語言的三大特性 封裝 繼承和多型。封裝可以隱藏實現細節,使得 模組化,繼承可以拓展已存在的模組。目的都是為了 重用,而多型是為了介面重用。多型是通過虛函式實現的 a.封裝 把過程和資料封裝起來,決定哪些特性是可見的,哪些特性是隱藏的,保證了...
C 虛函式相關
c 的封裝 繼承和多型三大特性,封裝沒什麼好說的,就是把事務屬性和操作抽象成為類,在用類去例項化物件,從而物件可以使用操作 管理使用它的屬性。至於繼承,和多型密不可分。基類可以進行派生,而派生類則是繼承基類或稱父類,把基類中屬性和方法拿過來,變成自己的一部分,其中需要較為精細的思考。多型則是一種實現...
C 虛函式 純虛函式
1 基本概念 虛函式是在基類中使用關鍵字virtual宣告的函式。在派生類中重新定義基類中定義的虛函式時,會告訴編譯器不要靜態鏈結到該函式。我們想要的是在程式中任意點可以根據所呼叫的物件型別來選擇呼叫的函式,這種操作被稱為動態鏈結,或後期繫結。您可能想要在基類中定義虛函式,以便在派生類中重新定義該函...