1.丟擲問題
c++中的class從物件導向理論出發,將變數(屬性)和函式(方法)集中定義在一起,用於描述現實世界中的類。從計算機的角度,程式依然由資料段和**段構成。
c++
編譯器如何完成物件導向理論到電腦程式的轉化?
換句話:c++編譯器是如何管理類、物件、類和物件之間的關係
具體的說:具體物件呼叫類寫的方法,那,c++編譯器是如何區分,是那個具體的類,呼叫這個方法那?
class c1
; //12
class c2
//4void setk(int val) //4
protected:
private:
}; //24 16 12
struct s1
; //
struct s2
; //
int main()
2、 用記憶體四區解釋 c++屬性和方法1)c++類物件中的成員變數和成員函式是分開儲存的
成員變數:
普通成員變數:儲存於物件中,與struct變數有相同的記憶體布局和位元組對齊方式
靜態成員變數:儲存於全域性資料區中
成員函式:儲存於**段中。
問題出來了:很多物件公用一塊**?**是如何區分具體物件的那?
換句話說:int getk() const ,**是如何區分,具體obj1、obj2、obj3物件的k值?
2)c++編譯器對普通成員函式的內部處理
3)總結
1、c++類物件中的成員變數和成員函式是分開儲存的。c語言中的記憶體四區模型仍然有效!
2
、c++
中類的普通成員函式都隱式包含乙個指向當前物件的
this
指標。3、靜態成員函式、成員變數屬於類
靜態成員函式與普通成員函式的區別
靜態成員函式不包含指向具體物件的指標
普通成員函式包含乙個指向具體物件的指標
C 物件導向模型初探
前言 c 物件模型可以概括為以下2部分 1.語言中直接支援物件導向程式設計的部分,主要涉及如建構函式 析構函式 虛函式 繼承 單繼承 多繼承 虛繼承 多型等等。2.對於各種支援的底層實現機制。在c語言中,資料 和 處理資料的操作 函式 是分開來宣告的,也就是說,語言本身並沒有支援 資料和函式 之間的...
C 中物件導向模型初探
這裡主要概述成員函式的本質,這裡只是用c語言的方式來實現c 中類的功能,並不代表c 編譯器的真正做法,但c 編譯器實現原理大致如此。注釋部分為c 的實現方式,也是c 編譯器的實現原理 總結 1 c 類物件中的成員變數和成員函式是分開儲存的,c語言的記憶體四區模型仍然有效 2 c 中類的普通成員函式都...
C 物件模型初探
在c 中有兩種class data members static和non static,以及三種class member functions static non static 和virtual。簡單物件模型 乙個object由一系列的slots組成,每乙個slot指向乙個member,slots按...