随笔-145  评论-173  文章-70  trackbacks-0

 

 

在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++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理