在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也是一样,都要显示的来指出。
posted on 2010-01-07 23:46
deercoder 阅读(1390)
评论(0) 编辑 收藏 引用 所属分类:
C/C++