C++中外部函数修改多类对象后外部未生效的问题解决
问题原因与解决方案
你的代码核心问题在于函数参数的传递方式:setting函数使用的是值传递,调用时会将main中的object和object2完整复制一份,函数内部修改的只是这个副本,原对象不会受到任何影响,所以外部看不到修改效果。
解决方法1:引用传递(推荐)
将函数参数改为引用类型,这样函数直接操作原对象本身,不会产生副本。修改setting函数的声明与定义:
void setting(Test &object, Test2 &object2) // 参数前添加&表示引用 { cout << endl << "Success" << endl; object.setAttrib(1); object2.setCharacter('A'); cout << object.getAttrib() << endl; cout << object2.getCharacter() << endl; }
main中的调用代码无需修改,直接调用setting(object, object2)即可,此时函数内的修改会同步到外部原对象。
解决方法2:指针传递
如果习惯使用指针,也可以通过传递对象地址来操作原对象:
首先修改setting函数的声明与定义:
void setting(Test *object, Test2 *object2) { cout << endl << "Success" << endl; object->setAttrib(1); // 指针用->访问成员方法 object2->setCharacter('A'); cout << object->getAttrib() << endl; cout << object2->getCharacter() << endl; }
然后在main中调用时传递对象的地址:
setting(&object, &object2); // 用&获取对象地址
两种方法都能实现修改原对象的需求,其中引用传递更符合C++的语法习惯,代码更简洁直观。
内容的提问来源于stack exchange,提问作者John Taylor tayj22
相关产品推荐
相关产品推荐

