class Date{public : Date(int year = 1900, int month = 1, int day = 1) { this->year = year; this->month = month; this->day = day; } Date(Date& d) { this->year = d.year; this->month = d.month; this->day = d.day; } void dosomthing() { }PRivate: int year; int month; int day;};void Funtest(){ Date d1(2017, 2, 18); d1.dosomthing(); Date d2(d1); d2.dosomthing();}int main(){ Funtest(); system("pause"); return 0;} 在這段代碼中定義了一個構造函數,一個拷貝構造函數和一個普通成員函數。在創建d1對象時,調用了構造函數,構造函數是沒有this指針這個參數的,但是在監視窗口中可以看到this指針,而且它的值就是對象d1的地址。
d1調用普通成員函數dosomthing()時,這個函數中是沒有參數的,但是也可以通過監視窗口查看到有this指針,而且this的值是d1的地址。
通過創建對象d2,對象d2調用普通成員函數dosomthig(),也可以清楚看到函數中隱藏了this指針這個參數,并且this指針的值就是對象d2的地址。
這樣做可以保證不同對象的成員函數使用數據成員時,使用的一定是指定對象的數據成員。4.為什this指針不能在函數中使用?靜態成員函數并不是針對某個類的實例對象,而是屬于整個類的,為所有的對象實例所共有。它在作用域的范圍內是全局的,獨立于類的對象之外的。它只對類內部的靜態成員變量做操作。當實例化一個類的對象時候,里面不存在靜態成員的。this指針是相當于一個類的實例的指針,this是用來操作對象實例的內容的,既然靜態成員函數和變量都是獨立于類的實例對象之外的,它就不能用this指針,也不能操作非靜態成員。5.我們只有獲得一個對象后,才能通過對象使用this指針,如果我們知道一個對象this指針的位置,能否直接使用?獲取一個對象之后,我們不應該也不需要在類外使用this對其操作,this是一個右值,是非靜態成員函數的一個隱藏參數,不存在所謂的this的“位置”,只是用this標記了對象所存在的位置,&this不會通過編譯。
新聞熱點
疑難解答