this指標指向呼叫的物件本身,在成員函式中,都會有乙個預設的引數this。這點如果學過python的話,可能會知道,在python中每乙個成員函式都會乙個引數self,這裡的this就是差不多的東西。其實具體來說,this指標也是指標,它儲存的也是乙個位址。當我們用乙個物件去呼叫乙個成員函式時,我們會把該物件的位址傳給該函式,這也就是在函式中的this引數。因此this指標中儲存的是呼叫物件的位址。
下面來看乙個簡單的例子:
在程式設計的過程中會發現許多問題,在用指標來得到結構體或者類的成員時我們不能使用』.'運算子來,需要使用->來訪問才不會報錯。其次,對於乙個成員函式如何要使用引數的預設值,在類中定義時,不需要給出缺省的函式引數。不然也會報錯。#include using namespace std;
class line
;line::line()
line::~line()
void line::setl(int l = 3)
int line::getl()
void line::printl()
int main()
執行結果:
剛才看到使用printl()函式利用this指標來呼叫成員函式和成員變數。還有另外的一種方式來實現同樣的操作,那就是友元函式。友元函式不屬於類,但可以訪問類的所有成員,包括私有成員和保護成員。與成員函式不同的是它沒有this指標,它不屬於類。建立物件
建立物件
len is:10
len is:3
釋放記憶體
釋放記憶體
執行結果:#include using namespace std;
class line
;line::line()
line::~line()
void line::setl(int l = 3)
int line::getl()
void line::printl()
void friend_test(line line)
int main()
可以看出,在友元函式中可以直接訪問私有變數。建立物件
建立物件
len is:10
len is:3
len is :10
釋放記憶體
len is :3
釋放記憶體
釋放記憶體
釋放記憶體
執行結果:#include using namespace std;
class line
;line::line()
line::~line()
void line::setl(int l = 3)
int line::getl()
int main()
需要注意的是,類的指標訪問類的成員時需要使用->這個運算子。建立物件
建立物件
line len is: 10
line2 len is:3
釋放記憶體
釋放記憶體
類中的靜態的成員,意思是該類的所有物件共用這乙個變數,不會隨著物件的建立而被拷貝。講到通俗一點就是,用static修飾的變數的位址已經鎖定了,不可以更改。
靜態成員的用法,當靜態成員被定義時需要進行初始化。如果沒有初始化,那麼當該類建立第乙個物件時,會自動為所有的靜態成員變數進行初始化,值為0;並且在類中定義的靜態變數不可以在類中定義時就對其初始化。可以使用:型別 類名::變數名 = 0這種形式來進行初始化。
#include using namespace std;
class line
;int line::count = 0;
line::line()
line::~line()
void line::setl(int l = 3)
int line::getl()
int main()
{ line line;
cout << "已將建立的物件有:"<< line.count << " 個" 《執行結果:
建立物件
已將建立的物件有:1 個
建立物件
建立物件
建立物件
已將建立的物件有:4 個
釋放記憶體
釋放記憶體
釋放記憶體
釋放記憶體
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...