學習 類和物件 物件模型和this指標

2022-03-14 00:46:19 字數 2505 閱讀 4183

成員變數和成員函式分開儲存:

在c++中,類內的成員變數和成員函式分開儲存

第一點:空物件占用記憶體空間1個位元組

第二點:只有非靜態成員變數才屬於類的物件上,非靜態成員函式靜態成員函式靜態成員變數不屬於類的物件上

示例**如下:結果為4個位元組

#include#includeusing namespace std;

class person // 非靜態成員函式 不屬於類的物件

static void s_func() {}// 靜態成員函式 不屬於類的物件

};int person::m_b = 1;

void test01()

int main()

this指標概念:

this指標指向被呼叫的成員函式所屬的物件

特點1:this指標是隱含每乙個非靜態成員函式內的一種指標

特點2:this指標不需要定義,直接使用即可

this指標的用途:

1、當形參和成員變數同名時,可用this指標來區分

2、在類的非靜態成員函式中返回物件本身,可使用return *this

示例:①所指的**這種輸出的資料是錯誤的,原因就是形參和成員變數同名,編譯器就不知道age=age到底是生成了乙個age給age賦值,還是給自身的物件age賦形參的值,所以我們可以通過this指標來解決問題,this指標指向被呼叫的成員所屬的物件

#include#includeusing namespace std;

class person

public:

int age;

};void test01()

int main()

第二點:在類的非靜態成員函式中返回物件本身,可使用return *this

示例

#include#includeusing namespace std;

class person

person & addage()

public:

int age;

};void test01()

int main()

拓展:聽老師說如果把person類中定義的person & addage()&去掉的話,那麼結果會是什麼呢?

結果:輸出28,那麼只加了一次,那麼後面的addage都去哪了呢?

答案:當person addage()方式是以值傳遞的方式返回物件,那麼就會進行拷貝建構函式,複製乙個新的物件返回

記住一點:當&修飾的時候,返回的是本體,當&沒用修飾的時候 返回乙個新的物件

空指標訪問成員函式

c++中空指標也是可以呼叫成員函式的,但是也要注意有沒有用到this指標

為什麼空指標可以呼叫成員函式呢?個人理解:根據上文聯絡理解,成員變數和成員函式是分開的,只有非靜態成員變數是物件本身的

#include#includeusing namespace std;

class person

cout << this->m_age << endl;

} void print_hello()

public:

int m_age;

};void test01()

int main()

const修飾成員函式:

常函式:

1、成員函式後加const後我們稱為這個函式為常函式

2、常函式內不可以修改成員屬性

3、成員屬性宣告時加關鍵字mutable後,在常函式中依然可以修改

常物件:

1、宣告物件前加const稱該物件為常物件

2、常物件只能呼叫常函式

示例**:

#include#includeusing namespace std;

class person

void showp() const

public:

int a;

mutable int b; //mutable 修飾為可修改 可變的

};int main()

Objective C物件模型 類物件和元類物件

參考 objective c物件之類物件和元類物件 一 objective c物件模型及應用 參看以上文章基本可以了解objective c物件模型模型了,可做學習 1.動態替換類方法或例項方法 method swizzling api 2.編寫category類別 3.動態增加屬性 objc se...

C 類和物件(三) C 物件模型和this指標

c 中,類的成員變數和成員函式分開儲存。只有非靜態成員變數屬於類的物件,占用物件的記憶體空間。注1 非靜態成員函式和靜態成員 包括靜態成員變數與靜態成員函式 均不屬於類的物件,不占用物件的記憶體空間。注2 非靜態成員函式並非某個物件獨有,記憶體中僅存在乙份資料 乙份函式例項 不同物件的某個非靜態成員...

C 類和物件 類和物件

c 中物件的型別稱為類,類代表了某一批物件的共性和特徵,類是物件的抽象,而物件是類的具體例項,類是抽象的,不占用記憶體,而物件是具體的,占用 儲存空間,這點很重要,讀者需要牢記。類是使用者自己指定的型別,如果程式中要用到類型別,必須自己根據需要進行宣告,或者使用別人已設計好的類,c 標準本身並不提供...