this 是 c++ 中的乙個關鍵字,也是乙個 const 指標,它指向當前物件,通過它可以訪問當前物件的所有成員。
所謂當前物件,是指正在使用的物件。例如對於stu.show();,stu 就是當前物件,this 就指向 stu。
下面是使用 this 的乙個完整示例:
執行結果:#include
using
namespace
std;
class student;
void student::setname(char *name)
void student::setage(int age)
void student::setscore(float score)
void student::show()
李華的年齡是16,成績是96.5
this 只能用在類的內部,通過 this 可以訪問類的所有成員,包括 private、protected、public 屬性的。
本例中成員函式的引數和成員變數重名,只能通過 this 區分。以成員函式setname(char *name)為例,它的形參是name,和成員變數name重名,如果寫作name = name;這樣的語句,就是給形參name賦值,而不是給成員變數name賦值。而寫作this -> name = name;後,=左邊的name就是成員變數,右邊的name就是形參,一目了然。
注意,this 是乙個指標,要用->來訪問成員變數或成員函式。
this 雖然用在類的內部,但是只有在物件被建立以後才會給 this 賦值,並且這個賦值的過程是編譯器自動完成的,不需要使用者干預,使用者也不能顯式地給 this 賦值。本例中,this 的值和 pstu 的值是相同的。
我們不妨來證明一下,給 student 類新增乙個成員函式printthis(),專門用來輸出 this 的值,如下所示:
this 到底是什麼?void student::printthis()
{ cout
<《然後在 main() 函式中建立物件並呼叫 printthis():
student *pstu1 = new student;
pstu1-> printthis();
coutpstu2-> printthis();
cout《執行結果:
0x7b17d8
0x7b17d8
0x7b17f0
0x7b17f0
可以發現,this 確實指向了當前物件,而且對於不同的物件,this 的值也不一樣。
幾點注意:
this 是 const 指標,它的值是不能被修改的,一切企圖修改該指標的操作,如賦值、遞增、遞減等都是不允許的。
this 只能在成員函式內部使用,用在其他地方沒有意義,也是非法的。
只有當物件被建立後 this 才有意義,因此不能在 static 成員函式中使用(後續會講到 static 成員)。
1.this 實際上是成員函式的乙個形參,在呼叫成員函式時將物件的位址作為實參傳遞給 this。不過 this 這個形參是隱式的,它並不出現在**中,而是在編譯階段由編譯器默默地將它新增到引數列表中。
2.this 作為隱式形參,本質上是成員函式的區域性變數,所以只能用在成員函式的內部,並且只有在通過物件呼叫成員函式時才給 this 賦值。
3.this指標並不占用物件的空間
4.this在成員函式的開始執行前構造,在成員函式的執行結束後清除
5.this指標可能存放在堆,棧,也可能是結存器。
在《c++函式編譯原理和成員函式的實現》一節中講到,成員函式最終被編譯成與物件無關的普通函式,除了成員變數,會丟失所有資訊,所以編譯時要在成員函式中新增乙個額外的引數,把當前物件的首位址傳入,以此來關聯成員函式和成員變數。這個額外的引數,實際上就是 this,它是成員函式和成員變數關聯的橋梁。
C C 基礎 指標(3)
在c中使用動態記憶體,可以使用malloc來動態開闢一段空間。int p int malloc sizeof int 10 上面所示的例子就是使用malloc開闢動態記憶體的例子。使用malloc開闢動態記憶體返回的是乙個void型別的指標。可以使用型別轉換來使用乙個指標來儲存這個位址。動態開闢的記...
C C 基礎 指標(5)
二級指標的示意如上圖所示 變數int a的內容是255,其位址是0x0000ffff,int p是乙個指標,指標存的是a的位址,指標的位址是0xfbc00000 int pp是乙個二級指標,指標存的是乙個位址,該位址是一級指標p所在的位址。include include 為指標變數分配記憶體 voi...
C C 中的指標(筆記) 指標基礎知識總結
記憶體區的每乙個位元組都有乙個編號,就是 位址 如果在程式中定義了乙個變數,在對程式進行編譯或者執行時,系統會給這個變數分配記憶體單元,並確定他的記憶體位址 編號 指標的實質就是記憶體位址,指標就是位址,位址就是指標 通常我們敘述時會把指標變數簡稱為指標,實際他們的含義不一樣 1指標也是一種資料型別...