C++複習重點總結之六-編譯器對屬性與方法的處理機制

黄舟
發布: 2017-01-16 11:30:03
原創
1277 人瀏覽過

編譯器對屬性和方法的處理機制 

C++中的class從物件導向理論出發,將變數(屬性)和函數(方法)集中定義在一起,用於描述現實世界中的類別。從電腦的角度,程式依然由資料段和程式碼段構成。

C++編譯器如何完成物件導向理論到電腦程式的轉換?

換句話說:C++編譯器是如何管理類別、物件、類別和物件之間的關係

具體的說:具體物件呼叫類別中的方法,那,c++編譯器是如何區分,是那個具體的類,呼叫這個方法那?

1)C++類物件中的成員變數和成員函數是分開儲存的

成員變數:

普通成員變數:儲存於物件中,與struct變數有相同的記憶體佈局和位元組對齊方式

靜態成員變數:儲存於全域資料區中

成員函數:儲存於程式碼段中。

問題出來了:很多物件共用一塊程式碼?程式碼是如何區分具體物件的那?

換句話說:int getK() const { return k; },程式碼是如何區分,具體obj1、obj2、obj3物件的k值?

C++複習重點總結之六-編譯器對屬性與方法的處理機制

左邊是C++類別的實作右邊是對應底層實作。

總結:

1、C++類別物件中的成員變數和成員函數是分開儲存的。 C語言中的記憶體四區模型仍然有效!

2、C++中類別的普通成員函數都隱式包含一個指向目前物件的this指標。

3、靜態成員函數、成員變數屬於類別

靜態成員函數與普通成員函數的區別

靜態成員函數不包含指向具體物件的指標

普通成員函數包含一個指向具體物件的指標
拓展:

思考:類別的成員函數可透過const修飾,請問const修飾的是誰?


void const get(int a,intb)//类的成员函数
{
this->a=100;//错误
this->b=200;//错误
}
登入後複製

依上述分析內部實現為



void get (const Test *This,int a,int b)
登入後複製

因此const修飾的是this指標所指向的記憶體空間。


以上就是C++複習要點總結之六-編譯器對屬性與方法的處理機制的內容,更多相關內容請關注PHP中文網(www.php.cn)!


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板