当方法参数具有相同名称时,我们如何引用字段?

时间:2015-07-31 07:02:41

标签: c++ this

#include<iostream>
#include<fstream>
using namespace std;

class Integer {
public:
    int val;
    Integer(int val = 0) {
        this->val = val;
    }
    void setVal(int val) {
        this->val = val;
    }
};

int main()
{
    int val;
    Integer i;
    i.setVal(8);
    cout << val << endl;
}

当我执行我的代码时,我得到0。我是C ++的新手,我不明白this。有人可以详细说明这个问题吗?

2 个答案:

答案 0 :(得分:5)

您输出错误的val。如上所述,您可以调用i.val,因为您创建了数据成员val public ,但您也可以选择为Integer类创建一个函数(“getter”) 。无论如何,我建议您了解私有数据成员以及如何使用这些成员。

getter方法看起来像

// in the class
int getVal() {
  return val; // equal to return this->val
}

// in main()
cout << i.getVal() << endl;

请注意,如果您更改主要功能,则不再使用val中之前的main()。这也是重点 - 您现在正在使用类数据成员!

有关如何解决使用此指针的问题的讨论,请查看此问题:Is using underscore suffix for members beneficial?

此时您似乎也不需要包含 fstream

答案 1 :(得分:1)

您发明了val中的main与对象val内的i之间的关系。

除了分享名字之外,他们没有任何关系。

  • 删除val;
  • 中未设置的main
  • 输出i.val代替。