C++複習要點總結之六——編譯器對屬性和方法的處理機制

來源:互聯網
上載者:User
編譯器對屬性和方法的處理機制

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

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

換句話:C++編譯器是如何管理類、對象、類和對象之間的關係

具體的說:具體對象調用類中的方法,那,c++編譯器是如何區分,是那個具體的類,調用這個方法那?

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

成員變數:

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

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

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

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

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

左邊是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++複習要點總結之六——編譯器對屬性和方法的處理機制的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.