目錄
靜態成員就是在成員變數和成員函式前加上關鍵字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...