C 類和物件(3) this指標

2021-09-08 07:57:12 字數 1708 閱讀 8251

我們在現實中,定義乙個類都是根據乙個需求來定義的。所以先來看乙個常用的日期類 date 。

class date

void init(int year, int month, int day)

private://封裝起來不允許隨便修改

int _year;//年 //用_區分成員變數和引數

int _month;//月

int _day;//日

};int main()

對於上述類,有這樣的乙個問題:

date類中有 init 與 print 兩個成員函式,函式體中沒有關於不同物件的區分,那當s1呼叫 init 函式

時,該函式是如何知道應該設定s1物件,而不是設定s2物件呢?

c++中通過引入this指標解決該問題,即:c++編譯器給每個「成員函式「增加了乙個隱藏的指標引數,讓該指

針指向當前物件(函式執行時呼叫該函式的物件),在函式體中所有成員變數的操作,都是通過該指標去訪

問。只不過所有的操作對使用者是透明的,即使用者不需要來傳遞,編譯器自動完成。

1. this指標的型別:類的型別* const

2. 只能在「成員函式」的內部使用

3.this指標本質上其實是乙個成員函式的形參,是物件呼叫成員函式時,將物件位址作為實參傳遞給this形參。所以物件中不儲存this指標

4.this指標是成員函式第乙個隱含的指標形參,一般情況由編譯器通過ecx暫存器自動傳遞,不需要使用者傳遞

q1:那麼 this指標 存在**?

this指標是乙個形參,所以它存在棧上。

q2:this指標可以為空嗎?

class date

void show()

void init(int year, int month, int day)

private://封裝起來不允許隨便修改

int _year;//年 //用_區分成員變數和引數

int _month;//月

int _day;//日

在這裡,我們可以看到,它是可以編譯通過的,但是執行不了,實際上已經崩潰了。作為乙個空指標,只要不被解引用就不會出問題。

所以說this指標可以為空,當我們在呼叫函式的時候,如果函式內部並不需要使用到this,也就是不需要通過this指向當前物件並對其進行操作時才可以為空(當我們在其中什麼都不放或者在裡面隨便列印乙個字串),如果呼叫的函式需要指向當前物件,並進行操作,則會發生錯誤(空指標引用)就跟c中一樣不能進行空指標的引用。

空指標引用  ---->

Java物件導向3 this 和static

this 在類方法定義中使用this關鍵字代表使用該方法的物件的引用。當必須指出當前使用方法的物件是誰時要使用this。有時使用this可以處理方法中成員變數和引數重名的情況。this可以看作是乙個變數,它的值是對當前物件的引用。public class leaf leaf increament v...

C 類和物件 this指標

先來乙個c語言中的結構體 struct student 在建立結構體變數後,要修改結構體中的變數的話,需要這樣 int main 這樣子來修改或者呼叫 比如說我要寫乙個函式初始化學生 void initstudent student this,char name,char gender,int ag...

C 類和物件(3)

初始化列表是成員或類定義的地方。初始化列 式 class date private int year int month int day 需要注意的幾點 每個成員變數在初始化列表中只能出現一次 初始化只能初始化一次 類中包含以下成員時,必須放在初始化列表的位置進行初始化 class a privat...