我在一个名为 Man 的类中有一个名为 update 的方法。在我的 main.cpp 中,我调用:
int age=0;
Man person;
person.Update(age);
这会在方法中更新人的年龄。但是,当我回到主文件时,它没有更新的年龄。所以变量是在类方法中设置的,但不会返回到 main.cpp 上下文。
编辑
Man::Update(int age)
{
age++;
}
我在一个名为 Man 的类中有一个名为 update 的方法。在我的 main.cpp 中,我调用:
int age=0;
Man person;
person.Update(age);
这会在方法中更新人的年龄。但是,当我回到主文件时,它没有更新的年龄。所以变量是在类方法中设置的,但不会返回到 main.cpp 上下文。
Man::Update(int age)
{
age++;
}
void Man::Update(int & age)
{
age++;
}
它应该工作
对于要在调用范围内反映回变量的更改,必须将对该变量的引用传递给函数。传递引用时,函数范围内的变量有效地引用 / 是调用范围内的变量。
Man::Update(int &age) //The ampersand reflects that it is a reference
{
age++;
}
您正在做的事情称为按值传递。在这种情况下,会在函数作用域中创建变量的新副本,所做的任何更改都不会反映在调用作用域中。
但是,您在这种特定情况下所做的事情根本不需要类或成员函数。可以使用单个普通函数来完成。
您正在按 valueage
传递参数。这意味着它被复制到函数中并且该副本被修改。您需要通过引用传递参数。这在 C++ 中很容易完成,因为它提供了引用类型。具有引用类型的名称充当它所绑定的对象的别名。您所要做的就是在您的类型中添加一个 & 符号 ( ):Update
&
void Man::Update(int& age)
{
age++;
}
当您这样做时,person.Update(age);
您将对象绑定到函数age
中的引用age
。
其他人可能会为您提供使用指针的替代方法(获取int*
参数并传递&age
给函数)。这就是它在 C 中的实现方式——但我们不是在编写 C。不要让他们愚弄你!采用引用类型比使用指针更安全、更具表现力。
但是,我质疑为什么您有一个名为Man
并且age
不是Man
. 类是一种将相关数据作为对象一起存储的方法。我认为年龄是代表男性的数据的一部分。