記憶中,初識c++中的this指針的時候,根本不知道它是什麼,有什麼作用。再識,就知道了它的作用,也掌握了它背後的東西。
this指針,就是一個指向當前對象的指針。我們知道,定義出一個類,它在內存中是不占空間的,只有定義了該類類型的對象時,系統就會為該對象分配一段存儲空間,這段空間裡只存儲成員變量,對於成員函數,是存放在代碼區的。(復習:內存分為5大區:靜態區、常量區、棧、堆、代碼區)。下邊給出一個日期類,通過這個實例,深度理解this指針。
#define _CRT_SECURE_NO_WARNINGS 1 #includeusing namespace std; class Date { public: void setYear(int year) { m_year = year; } void setMonth(int month) { m_month = month; } void setDay(int day) { m_day = day; } void print() { cout << m_year << "-" << m_month << "-" << m_day << endl; } private: int m_year; int m_month; int m_day; }; int main() { Date date; date.setYear(2016); date.setMonth(7); date.setDay(4); date.print(); system("pause"); return 0; }
我們用圖片來解析上邊的代碼:
參數裡的this指針一般不需要寫,系統會隱式將對象的首地址傳給函數,但是如果要寫,函數調用的時候也需要寫上對象的地址,函數體中的this並不是在所有情況都可以省略,比如:(仍然使用上邊的日期類)
void setYear(int m_year) { this->m_year = m_year; }
在這種情況下出現了重名,函數體的this必須寫,當然有一定基礎的程序員才不會這麼寫呢。
越努力,越幸運~~