C++中形参和数据成员同名的情况

2014-11-24 13:01:21 · 作者: · 浏览: 1

C++中,如果出现函数的形参和类的数据成员同名的情况,一定不要为了图简省而使用下面的写法。例:

#include

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也是一样,都要显示的来指出。