C 靜態成員函式和this指標詳解

2022-09-26 09:51:33 字數 2416 閱讀 2427

目錄

靜態成員就是在成員變數和成員函式前加上關鍵字static,稱為靜態成員

靜態成員分為:

所有物件共享同乙份資料

在編譯階段分配記憶體

類內宣告,類外初始化

示例:#include

using namespace std;

class person

;int person::m = 0;// 類內宣告,類外初始化

所有物件共享乙個函式

靜態成員函式只能訪問靜態成員變數

#include

using namespace std;

class person

static int m_a;//靜態成員變數

int m_b;

};int person::m_a = 0;

int main()

靜態成員函式可以訪問靜態成員變數

靜態成員函式不可以訪問非靜態成員變數

私有許可權的靜態成員函式,也是訪問不到的

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

只有非靜態成員變數才屬於類的物件上

空物件:

#include

using namespace std;

class person

;void test01()

int main()

輸出結果:1

#include

using namespace std

class person

;void test02()

int main()

輸出結果:4

#include

using namespace std;

class person

;void test02()

int main()

輸出結果:4

與第二個對比可知:

靜態成員變數 不屬於類的物件上

#include

using namesp程式設計客棧ace std;

class person

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

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

}; int person::m_b = 0;

void test02()

int main()

輸出結果:4

結論:只有非靜態成員變數才屬於類的物件上

每乙個非靜態成員函式只會誕生乙份函式例項,也就是說多個同型別的物件會共用一塊**

那麼問題是:這塊**是如何區分是哪個物件呼叫自己的呢?

c++通過提供的特殊的物件指標,this指標,解決上述問題,this 指標指向被呼叫的成員函式所屬的物件,通俗的說,誰呼叫它,this就指向誰

this 指標是所有成員函式的隱含引數嗎,不需要定義,可直接使用

this 指標的用途

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

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

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

#include

using namespace std;

class person

int age;

};int main()

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

#include

using namespace std;

class person

int age;

};int main()

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

如果用到this指標,需要加以判斷保證**的健壯性

#include

using namespace std;

class person

};int main()

通過空指標p是可以訪問到成員函式(不帶this指標的成員函式)

如下**就是乙個錯誤**

#include

using namespace std;

class person

int m_name;

};int main()

解析:此處出現了this指標

cout << m_name << endl;

相當於cout < m_name << endl;

而this指標是乙個空指標,所以會報錯

為了增加**的健壯性,我們因該做出如下改動

#include

using namespace std;

class person

int m_name;

};int main()

本文標題: c++靜態成員函式和this指標詳解

本文位址:

C 靜態成員和成員指標

靜態成員函式 單例模式 成員指標 靜態成員變數 class 類名 資料型別 類名 變數 初值 定義和初始化類名 靜態成員變數 推薦 物件.靜態成員變數 和上面等價 include using namespace std class aint m data static int s data 宣告 靜...

C 的靜態成員函式指標

先簡單的說說非靜態的成員函式。非靜態成員函式指標的型別 類的非靜態成員是和類的物件相關的。也就是說,要通過類的物件來訪問變數。成員函式的型別定義為 typedef void a pfunc a是乙個類,有乙個成員函式void test 使用 pfunc p a test 示例 include usi...

C 的靜態成員函式指標

先簡單的說說非靜態的成員函式。非靜態成員函式指標的型別 類的非靜態成員是和類的物件相關的。也就是說,要通過類的物件來訪問變數。成員函式的型別定義為 typedef void a pfunc a是乙個類,有乙個成員函式void test 使用 pfunc p a test 示例 cpp view pl...