this指標 常函式 常物件

2022-04-27 13:56:12 字數 2011 閱讀 6380

this指標引入

類中物件的成員變數和成員函式是分開儲存的,sizeof(空class) = 1,另外示例中涉及到位元組對齊的問題,double本身的位元組為8,int為4,由於位元組對齊,int也為8,所以最終位元組數為16

1

class

person;89

void

test01()

非靜態成員變數才屬於物件本身,靜態成員變數、函式、非靜態成員函式(非內聯)不屬於物件本身

每乙個非內聯成員函式只會誕生乙份函式例項,多個同型別物件會共用一塊**,由於類中每個例項後的物件都有獨一無二的位址,因此不同的例項物件呼叫成員函式時,函式需要知道是誰在呼叫它,因此引入了this指標。

this指標原理

主要作用:為了區分不同的例項物件;解決命名衝突。

this指標是隱含在物件成員函式內的一種指標。當乙個物件被建立後,它的每乙個成員函式都會含有乙個系統自動生成的隱含指標this。this指標指向被呼叫的成員函式所屬的物件(誰呼叫成員函式,this指向誰),*this表示物件本身,非靜態成員函式中才有this,靜態成員函式內部沒有。

1

class

person910

void

test()

1314

static

void

test01()

17};

1819

void

class_test()

編譯器對上述**進行如下處理,對非靜態成員函式預設新增了this指標,型別為class *cosnt this

1

struct

person;56

void person_ini(person *const this, int

tmp)

9void person_test(person *const this)12

13static

void

person_test01()

16void

person_class_test()

this指標使用一般多用於:(1)當形參與成員變數名相同時,用this指標來區分;(2)在類的非靜態成員函式中返回物件本身,可以用return *this,this指向物件,*this表示物件本身。

1

class

person89

//pplus返回物件可以實現鏈式程式設計,如果沒引用則返回的是this指向物件的拷貝

10 person&pplus(person p)

1415

};16

17void

test01()

空指標訪問成員函式注意:(1)如果成員函式沒有用到this,則空指標可以直接訪問;(2)若成員函式用到了this,則可以加if判斷,如果this為null,則直接return掉。

常函式、常物件

void func() const //常函式

const person p2; //常物件

常函式修飾的是this指標,不允許修改this指標指向的值,如果執意要修改常函式,可以在成員屬性前加mutable。

常物件不允許修改屬性,不可以呼叫普通成員函式,可以呼叫常函式。

1

class

person

1011

void

test02()

1516

1718

};19

20void

test01()

常成員,常函式,常物件

知識點1.常物件中的任何型別的資料成員 無論私有還是公有 的值都不能被改變。知識點2.常物件能呼叫的 1.公有的常成員函式 2.建構函式 3.公有的靜態函式 知識點3.常物件與常成員函式只有同時存在才都有意義 知識點4.普通物件既可以呼叫常成員函式,也可以呼叫非常成員函式 知識點5.常成員函式不能更...

C 之常物件,常成員物件,常成員函式,常指標

一 常物件 time const t1 12,23,23 其中所有的值不能被修改。通過該物件只能呼叫它的常成員函式,而不能呼叫它的普通成員函式。以防普通成員函式會修改資料成員的值。但如果一定要修改常物件資料成員的值,可以將該資料成員宣告為mutable,如 mutable int count 把co...

常物件,常成員函式,常引用

宣告顯示 const 型別說明符 物件名 常物件的資料成員值在物件的整個生存期間不能被改變,即就是,常物件必須進行初始化,而且不能被更新。宣告形式 型別說明符 函式名 參數列 const 注意 1.在函式定義部分也需要帶const關鍵字。2.乙個常物件只能呼叫它的常成員函式,是常物件唯一的對外介面方...