更改函数中类实例的值

时间:2017-06-13 20:13:10

标签: c++ oop

我编写了以下代码来测试如何在函数中更改类对象的值。

using namespace std;

class test{
public:
    int a;
};

void runer(test testXX){
    testXX.a=10;
}

int main()
{
    test test1;
    test1.a=5;
    runer(test1);
    cout<<test1.a;
    return 0;
}

当我运行以下代码时,输​​出是5而不是10.这是因为我无法更改类实例的值,就像我不能在不使用指针的情况下更改数组成员的值一样?如果有人能澄清一下,我将不胜感激!

3 个答案:

答案 0 :(得分:1)

void runer(test testXX){
    testXX.a=10;
}

获取类型test的完整副本,因此它在函数中被修改,但与main中的实例不同。

C++中的参数按值发送。最有意义的例子是

 int function( int value ) {
      for( ; value > 0 ; value-- ){
          cout << "Hello\n";
      }
 } 

 int main( int , char ** ){
       int value = 10;
        function( value ); // display 10 things
        function( value ); // display 10 things again (not modified).
        function( 5 );  // also not making sense, if parameter is modified.
 }

要允许修改对象,需要将它们作为引用或指针发送。这允许更改项目的值。文字5无法发送到期望引用的函数。

void runer(test & testXX){
    testXX.a=10;
}

现在,同一个对象从main发送到runner,并对单个对象进行了修改。

答案 1 :(得分:1)

您正在通过值将参数传递给函数,因此它获取的本地副本只与函数的范围一样长。

如果希望函数能够修改传入的原始对象,则通过非const引用void runer(test& testXX)传递它。

答案 2 :(得分:0)

您的代码按值进行调用。因此,变化不会出现在实际对象中。要更改对象属性的值,需要通过引用进行调用。

void runer(test &t){
    t.a = 10;
}