在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也是一樣,都要顯示的來指出。