C 指標 this指標 靜態成員

2021-09-25 23:35:59 字數 2286 閱讀 3639

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()

在程式設計的過程中會發現許多問題,在用指標來得到結構體或者類的成員時我們不能使用』.'運算子來,需要使用->來訪問才不會報錯。其次,對於乙個成員函式如何要使用引數的預設值,在類中定義時,不需要給出缺省的函式引數。不然也會報錯。

執行結果:

建立物件

建立物件

len is:10

len is:3

釋放記憶體

釋放記憶體

剛才看到使用printl()函式利用this指標來呼叫成員函式和成員變數。還有另外的一種方式來實現同樣的操作,那就是友元函式。友元函式不屬於類,但可以訪問類的所有成員,包括私有成員和保護成員。與成員函式不同的是它沒有this指標,它不屬於類。

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