C 中的this指標

2021-06-03 07:42:59 字數 1567 閱讀 9277

1.this 指標的引入

每個成員函式(static函式外)都有乙個額外的隱含的this指標,乙個類物件在條用成員函式時this指標初始化為呼叫函式物件的位址。

例1//sales_item.h

class sales_item

//sales_item.cpp

bool sales_item::same_isbn(const sales_item & rhs) const

sales_item  item1,item2;

item.same_isbn(item2);

編譯器會重寫這個函式呼叫:

sales_item::isbn(&item1,item2);

*也即為 return (item1.isbn == item2.isbn);

2.const 成員函式

在非const成員函式中(如例1),this指標是指向 sales_item 型別的const 指標,即sales_item *const 型別,而在const成員函式中則為const  sales_item * const型別。

因此例1又與下面的**一樣:

bool sales_item::same_isbn(const sales_item * const this,

const sales_item &rhs) const

3.this 指標的使用

a.怎樣使用this指標

在成員函式中不必顯示地使用this指標來訪問函式所屬物件的成員,由於this指標是隱式定義的,因此不需要在成員函式的形參表中包含this指標,實際上這樣也是非法的,無法通過編譯,而在函式體內可以顯示地使用this。

下面**與例1相同但沒必要

bool sales_item::same_isbn(const sales_item & rhs) const

b.何時使用this指標

在乙個成員函式中,當我們需要將乙個物件作為乙個整體引用而不物件的某乙個資料成員,最常見的是乙個成員函式返回物件的引用。

例2class a

;a obj;

obj.fun1().fun2()(等價於obj.fun1(); obj.fun2;)

當我們想像上面這樣用時,那麼我們fun1()和fun2()必須這樣寫

a& a::fun1()

a& a::fun2()

4.從 const 成員函式返回 this

考慮在a類中再加入另乙個成員函式:

a &fun3() const;假設該函式已定義且函式體內最後也是return this;

那麼請看下面的用法;

obj.fun3().fun1();

那麼這時用法就會出現錯誤,fun3成員函式返回this指標是const  a *const 型別,即乙個指向const a型別的 const 指標,他不能用來呼叫非const成員函式(const 類型別物件、指標或引用無法呼叫非const 成員函式)。

針對這個問題,我們可以使用基於 const 成員函式的過載,即定義兩個版本的fun3函式:

a &fun3()

const a &fun3() const;

參考文獻:《c++ primer》

C 中的this指標

當乙個成員函式被呼叫時,自動向它傳遞乙個隱含的引數,該引數是乙個指向接 受該函式的呼叫的物件的指標,在程式中可以使用關鍵字this指標來引用改制鎮,因此稱該指標為this指標。this指標是c 實現封裝的一種機制,它將成員和用於操作這些成員的成員函式聯絡在一起。例如 location類的成員函式in...

C 中的指標

在學習c c 過程中,指標是乙個比較讓人頭痛的問題,稍微不注意將會是程式編譯無法通過,甚至造成宕機。在程式設計過程中,指標也往往是產生隱含bug的原因。下面就來談談指標的應用以及需要注意的一些問題,裡面也許就有你平時沒有注意到的問題,希望能幫助各位讀者理解好指標。一 我們先來回憶一下指標的概念吧,方...

C 中的This指標

c 中使用this指標來指向用來呼叫成員函 數的物件。乙個物件 的this指標並不是物件本身的一部分,不會影響sizeof 物件 的結果。this 作用域是在類內部,當在類的非靜態成員函式中訪問類的非靜態成員的時候,編譯器會自動將 物件本身的位址作為乙個隱含 引數傳遞 給函式。也就是說,即使你沒有寫...