我编写了以下代码来测试如何在函数中更改类对象的值。
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.这是因为我无法更改类实例的值,就像我不能在不使用指针的情况下更改数组成员的值一样?如果有人能澄清一下,我将不胜感激!
答案 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;
}