将变量传递给类方法

时间:2012-12-29 14:31:52

标签: c++

我在名为Man的类中有一个名为update的方法。在我的main.cpp中,我打电话:

int age=0;
Man person;
person.Update(age);

这会更新方法中人的年龄。但是,当我回到主文件时,它没有更新的年龄。所以变量是在类方法中设置的,但是没有返回到main.cpp上下文。

修改

Man::Update(int age)
{
    age++;
}

3 个答案:

答案 0 :(得分:3)

void Man::Update(int & age)
{
   age++;
}

它应该有用

答案 1 :(得分:3)

对于要在调用范围内反映的变量的更改,必须将对该变量的引用传递给该函数。传递引用时,函数作用域中的变量有效地引用/是调用作用域中的变量。

Man::Update(int &age) //The ampersand reflects that it is a reference
{
    age++;
}

你正在做什么叫做值传递。在这种情况下,在函数作用域中创建变量的新副本,并且所做的任何更改都不会反映在调用作用域中。

请查看detailed explanation,以及Q&A style explanation

但是,在这种特定情况下,您所做的事情根本不需要类或成员函数。可以使用单个普通函数完成。

答案 2 :(得分:2)

您正在按值传递age参数。这意味着它被复制到函数Update中并且该副本被修改。您需要通过引用传递参数。这很容易在C ++中完成,因为它提供了引用类型。带引用类型的名称充当绑定到的对象的别名。您所要做的就是在您的类型中添加&符号(&):

void Man::Update(int& age)
{
  age++;
}

执行person.Update(age);时,您将对象age绑定到函数中的引用age

其他人可能会给你一个使用指针的替代方法(采用int*参数并将&age传递给函数)。这就是用C语言完成的 - 但我们不是写C.不要让他们欺骗你!采用引用类型比使用指针更安全,更具表现力。

但是,我怀疑为什么你有一个名为Man的课程而age不是Man的成员。类是将相关数据作为对象存储在一起的一种方法。我认为年龄是代表男人的数据的一部分。