在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指針來顯示的解決這個問題?;蛘哂米饔糜蛳薅ǚ麃斫鉀Q。
更改后才會出現正確的結果,而以前,自己一直都沒有注意到。
為何會這樣呢?因為按照范圍從小到大的順序,形參的范圍更小,所以替換的就是恒等式,那么自然不會顯示的來給成員賦值,因為類的成員作用范圍更小,此處,要謹記。
而且對于Java也是一樣,都要顯示的來指出。
posted on 2010-01-07 23:46
deercoder 閱讀(1450)
評論(0) 編輯 收藏 引用 所屬分類:
C/C++