前言
c++物件模型可以概括為以下2部分:
1. 語言中直接支援物件導向程式設計的部分,主要涉及如建構函式、析構函式、虛函式、繼承(單繼承、多繼承、虛繼承)、多型等等。
2. 對於各種支援的底層實現機制。
在c語言中,「資料」和「處理資料的操作(函式)」是分開來宣告的,也就是說,語言本身並沒有支援「資料和函式」之間的關聯性。在c++中,通過抽象資料型別(abstractdata type,adt),在類中定義資料和函式,來實現資料和函式直接的繫結。
概括來說,在c++類中有兩種成員資料:static、nonstatic;三種成員函式:static、nonstatic、virtual。
}; //24 16 12(鐵釘的不對)
struct s1
; //12
struct s2
; //16
int main() 結果:12 12 12 12
通過上面的案例,我們可以的得出:
1)c++類物件中的成員變數和成員函式是分開儲存的
成員變數:
普通成員變數:儲存於物件中,與struct變數有相同的記憶體布局和位元組對齊方式
靜態成員變數:儲存於全域性資料區中
成員函式:儲存於**段中。
2)問題出來了:
很多物件共用一塊**?**是如何區分具體物件的那?
換句話說:int getk() const ,**是如何區分,具體obj1、obj2、obj3物件的k
值?
#include using namespace std;
class test
void printt()
{ cout
// 2-3 const修飾的是this指標所指向的記憶體空間, 修飾的是this指標
void opvar( int a, int b) const //==>void opvar(const test *this, int a, int b)
//==>void opvar( const test *const this, int a, int b)
{ a = 100;
//this->a = 100;
//this->b = 200;
//this = 0x11;
//cout<
cout<
在設計類的時候,乙個原則就是對於不改變資料成員的成員函式都要在後面加 const,而對於改變資料成員的成員函式不能加 const。所以 const 關鍵字對成員函式的行為作了更加明確的限定:
有 const 修飾的成員函式(指 const 放在函式引數表的後面,而不是在函式前面或者參數列內),只能讀取資料成員,不能改變資料成員;沒有 const 修飾的成員函式,對資料成員則是可讀可寫的。
除此之外,在類的成員函式後面加 const 還有什麼好處呢?
那就是常量(即 const)物件可以呼叫 const 成員函式,而不能呼叫非const修飾的函式。
1、把全域性函式轉化成成員函式,通過this指標隱藏左運算元
testadd(test &t1, test &t2)===》test add(test&t2)
2、把成員函式轉換成全域性函式,多了乙個引數
voidprintab()===》void printab(test *pthis)
3、函式返回元素和返回引用
test& add(test &t2) //*this //函式返回引用
this->a = this->a +t2.geta();
this->b = this->b +t2.getb();
return*this; //*操作讓this指標回到元素狀態
test add2(test &t2)//*this //函式返回元素
//t3是區域性變數
test t3(this->a+t2.geta(),this->b + t2.getb()) ;
return t3; //會呼叫copy建構函式,而且此匿名物件有可能被析構掉,之所以是有可能,還是要看是賦值還是初始化
C 中物件導向模型初探
這裡主要概述成員函式的本質,這裡只是用c語言的方式來實現c 中類的功能,並不代表c 編譯器的真正做法,但c 編譯器實現原理大致如此。注釋部分為c 的實現方式,也是c 編譯器的實現原理 總結 1 c 類物件中的成員變數和成員函式是分開儲存的,c語言的記憶體四區模型仍然有效 2 c 中類的普通成員函式都...
14物件導向模型初探
c 物件模型可以概括為以下2部分 1.語言中直接支援物件導向程式設計的部分,主要涉及如建構函式 析構函式 虛函式 繼承 單繼承 多繼承 虛繼承 多型等等。2.對於各種支援的底層實現機制。在c語言中,資料 和 處理資料的操作 函式 是分開來宣告的,也就是說,語言本身並沒有支援 資料和函式 之間的關聯性...
C 物件模型初探
在c 中有兩種class data members static和non static,以及三種class member functions static non static 和virtual。簡單物件模型 乙個object由一系列的slots組成,每乙個slot指向乙個member,slots按...