this指標
以下**中定義了三個物件a,b,c. 因此有三個同樣空間大小分別存放三個物件的資料成員。但是三個物件都同樣呼叫了calcircle()函式.當不同物件的成員函式引用資料成員時,如何保證引用的是指定物件的資料成員呢?
在每乙個成員函式中都包含乙個特殊的指標,稱為this指標,它是指向本類物件的指標。
this指標是乙個特殊的隱含指標,它隱含在每乙個類的非靜態成員函式中(包括建構函式和析構函式),即類的每個非靜態成員函式都有乙個this指標指向呼叫這個成員函式的物件。
當乙個物件呼叫成員函式時,編譯系統先將物件的首位址賦給this指標,然後呼叫成員函式。在成員函式訪問資料成員時,隱含的使用this指標,這樣成員函式就能夠通過this指標來訪問目的物件的資料成員。
例如:當a呼叫成員函式calcircle()時,編譯系統將物件a的起始位址賦給this指標,成員函式按照this指標的指向找到物件a的資料成員。因此,calcircle()函式計算pi *r * r時,實際上是執行: pi * (this->r) * (this->r),因為當前this指標指向a,因此相當於執行以下語句:pi *a.r *a.r 。
成員函式calcircle()的定義如下:
double circle::calcircle()
c++編譯後把它處理為:
double circle::calcircle(circle * this)
即在成員函式的形參列表中增加了乙個this指標。在呼叫該成員函式時,實際上是用以下方式呼叫的:a.calcircle(&a);
將物件a的位址傳遞給形參this指標,然後按this的指向去引用物件的資料成員。
上述的這些過程都是編譯系統自動實現的,程式設計者不必人為的在形參中增加this指標,也不必將物件a的位址傳遞給this指標。同時,在需要的時候也可以顯式的使用this指標。
#include
using
namespace std;
const
double pi=
3.1415926
;//this指標
class
circle
;double
calcircle()
;};circle::
circle
(double r1)
double circle::
calcircle()
intmain()
指標的使用
正如拿著名片可以找到某個人一樣,通過指標可以訪問其指向的某塊記憶體區域。為此,c語言引入了間接引用的概念,這需要使用運算子 1.運算子 的作用有兩個 一,宣告 宣告某個型別的指標變數 二,間接引用,通過指標訪問其指向的記憶體區域。double num 3 double pnum pnum 對以上 說...
指標的使用
指標的使用 1.注意 一定要在對指標應用解除應用操作符 之前,將指標初始化為乙個確定的位址。例子 include int main int a int p p 10 正確使用方法 p a p 10 c 中還可以使用 new來給指標確定位址。例子 include int main int a 4 ne...
指標的使用
指標的應用場景 1.交換兩個變數 2.函式返回多個值,某些值就只能通過指標返回 傳入的引數實際上是需要儲存帶回的結果的變數 3.函式返回運算的狀態,結果通過指標返回 傳入函式的數組成了什麼?函式引數表中的陣列實際上是指標 sizeof a sizeof int 但是可以用陣列的運算子進行運算 陣列引...