当方法参数具有相同的名称时,我们如何引用字段?
How do we refer to a field when method argument has same name?
#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
。有人能详细说明一下这个问题吗?
您正在输出错误的val
。如前所述,您可以调用i.val
,因为您将数据成员val
设置为公共,但是您也可以选择为Integer类创建一个函数(一个"getter")。无论如何,我建议学习private数据成员以及如何使用它们。
getter方法看起来像
// in the class
int getVal() {
return val; // equal to return this->val
}
// in main()
cout << i.getVal() << endl;
注意,如果你改变了主函数,你不再使用你以前的val
在main()
了。这也是关键所在——您现在使用的是类数据成员!
关于如何避免使用this指针的讨论,请查看这个问题:为成员使用下划线后缀是否有益?
此时似乎也不需要包含fstream。
您在main
中的val
和对象i
中的val
之间创建了一个关系。
它们除了共享一个名字之外没有任何关系。
- 删除
main
中未设置的val
; - 输出
i.val
代替。
相关文章:
- 为什么当我们有常量引用时创建临时对象?
- 如果我们通过引用传递变量,则递归中使用的堆栈空间量是否为零?
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- C++我们可以取消引用此指针吗?如果是这样,那么如何,如果不是,那为什么?
- 我们如何在指针中存储对对象的引用?
- 为什么我们不允许将纯引用参数传递给 std::thread,但允许传递原始指针?
- 为什么要使用引用来获取 *char?当我们使用指针时,不使用引用不是更好吗?
- 我们应该在 lambda 中通过常量引用来捕获吗?
- 我们如何在范围消失时通过引用返回变量
- 为什么我们需要传递常量共享指针作为引用?
- 我们可以获取子字符串的常量引用吗?
- 我们可以在范围循环中使用引用(而不是指针)上的删除
- 在 C++ 中,为什么我们在重载函数中将引用参数声明为 const
- 为什么我们需要在move构造函数中将右值引用设置为null
- 我们需要删除对非新对象的引用吗
- 为什么我们可以取消引用函数指针
- 将链表的头部传递给函数时。为什么我们需要通过引用来传递它,例如在 push(node* &head, int key)
- 为什么在重载 += 运算符时我们必须通过引用返回
- 我们应该在通过引用之前取消引用指针吗
- 在C++中,我们不能在没有初始化的情况下声明引用。为什么?