在C++中,如果出現函數的形參和類的數據成員同名的情況,一定不要為了圖簡省而使用下面的寫法。例:
#include <iostream> using namespace std;
class A { int x; int y; public : A(int x,int y); void print(); };
A::A(int x,int y) { x = x; y = y; } void A::print() { cout << "x:" << x << " y: " << y << endl; } int main() { A *a = new A(34,56); a->print(); delete a; return 0; } |
在紅色部分突出顯示的就是錯誤的寫法,實際上,形參的值根本沒有傳入到這個函數中,而在你輸出的時候,根本沒有x,y的值,也就是一個隨機的。說明形參根本沒有傳入。
這個也是Java中遇到的,如果有這種情況,java中用到的是this引用來顯示的圈定范圍,而C++中,也需要用this指針來顯示的解決這個問題。或者用作用域限定符來解決。
更改后才會出現正確的結果,而以前,自己一直都沒有注意到。
為何會這樣呢?因為按照范圍從小到大的順序,形參的范圍更小,所以替換的就是恒等式,那么自然不會顯示的來給成員賦值,因為類的成員作用范圍更小,此處,要謹記。
而且對于Java也是一樣,都要顯示的來指出。