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編譯器對上述**進行如下處理,對非靜態成員函式預設新增了this指標,型別為class *cosnt thisclass
person910
void
test()
1314
static
void
test01()
17};
1819
void
class_test()
1this指標使用一般多用於:(1)當形參與成員變數名相同時,用this指標來區分;(2)在類的非靜態成員函式中返回物件本身,可以用return *this,this指向物件,*this表示物件本身。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()
1空指標訪問成員函式注意:(1)如果成員函式沒有用到this,則空指標可以直接訪問;(2)若成員函式用到了this,則可以加if判斷,如果this為null,則直接return掉。class
person89
//pplus返回物件可以實現鏈式程式設計,如果沒引用則返回的是this指向物件的拷貝
10 person&pplus(person p)
1415
};16
17void
test01()
常函式、常物件
void func() const //常函式常函式修飾的是this指標,不允許修改this指標指向的值,如果執意要修改常函式,可以在成員屬性前加mutable。const person p2; //常物件
常物件不允許修改屬性,不可以呼叫普通成員函式,可以呼叫常函式。
1class
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.乙個常物件只能呼叫它的常成員函式,是常物件唯一的對外介面方...