C 物件導向模型初探

2021-08-09 08:38:32 字數 2447 閱讀 1681

前言

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按...