我在名为Man的类中有一个名为update的方法。在我的main.cpp中我打电话:将变量传递给类方法
int age=0;
Man person;
person.Update(age);
这会更新方法中的人的年龄。但是,当我回到主文件时,它没有更新的年龄。所以变量是在类方法中设置的,但没有回到main.cpp上下文。
EDIT
Man::Update(int age)
{
age++;
}
我在名为Man的类中有一个名为update的方法。在我的main.cpp中我打电话:将变量传递给类方法
int age=0;
Man person;
person.Update(age);
这会更新方法中的人的年龄。但是,当我回到主文件时,它没有更新的年龄。所以变量是在类方法中设置的,但没有回到main.cpp上下文。
Man::Update(int age)
{
age++;
}
对于一个变量的改变将被反射回在呼叫范围,对变量的引用必须被传递给函数。当通过引用时,函数范围中的变量有效地指/调用范围中的变量。
Man::Update(int &age) //The ampersand reflects that it is a reference
{
age++;
}
你在做什么叫做传值。在这种情况下,变量的新副本将在函数作用域中创建,并且所做的任何更改都不会反映回调用作用域中。
看看这个detailed explanation和这个为Q&A style explanation。
但是,您在这种特定情况下所做的事情,根本不需要类或成员函数。它可以使用单个正常的函数完成。
void Man::Update(int & age)
{
age++;
}
它应该工作
您正在通过值传递age
参数。这意味着它被复制到功能Update
中并且该副本被修改。您需要通过引用来传递参数。这很容易在C++中完成,因为它提供了引用类型。引用类型的名称充当它绑定到的对象的别名。所有你需要做的就是添加一个号(&
)你的类型:
void Man::Update(int& age)
{
age++;
}
当你做person.Update(age);
你的对象age
绑定到你的函数参考age
。
其他人可能会给你一个使用指针的替代方法(带一个int*
参数并将&age
传递给该函数)。这是如何在C中完成的 - 但我们不写C,不要让他们欺骗你!采用引用类型比使用指针更安全,更有表现力。
但是,我问你为什么有一个类叫Man
和age
不是Man
的成员。类是将相关数据作为对象存储在一起的一种方法。我会认为年龄是代表男性的数据的一部分。
这只是一个例子 – joncodo
这是一个反模式的例子。 –
我们需要查看“person :: update”的代码 –
Update()是否需要引用?我猜不是。 – JasonD
你是指什么意思? – joncodo