将类对象实例作为参数从 main() 传递给另一个类对象实例
Posted
技术标签:
【中文标题】将类对象实例作为参数从 main() 传递给另一个类对象实例【英文标题】:Pass class object instance as parameter to another class object instance from main() 【发布时间】:2018-12-21 17:50:21 【问题描述】:我在将类对象实例作为参数从main()
函数传递给另一个类对象实例时遇到问题。基本上问题出在下面的代码中:
#include <something>
#include "another_thing"
class A
void method1()
;
void method2()
;
;
class B
// Define an object of type class A
A class_object;
// Constructor
B(A &passed_object)
class_object = passed_object;
//other stuff here
void method1()
;
void method2()
;
;
int main()
A firstObject;
B secondObject(firstObject);
// Do something that changes A attributes;
return 0;
问题是在main()
的执行过程中,firstObject 的一些属性发生了变化,但在B 类的passed_object 中我没有看到这种变化。
编辑 基于@HolyBlackCat 提示,以这种方式解决:
修改了A &class_object;
中的A class_object;
,从构造函数中删除了class_object = passed_object;
并更改了B(A &passed_object) : class_object(passed_object)
中构造函数的B(A &passed_object)
【问题讨论】:
如果你想让class_object
引用一些A
类型的对象(例如在main
中创建的对象),你需要使class_object
成为一个参考.
还需要成员初始化列表
【参考方案1】:
由于B()
的参数是一个引用,所以简单地将firstObject
传递给它确实不会复制。
但您没有将A class_object;
设为引用。当您在 B()
中分配给它时,您正在制作副本。
您需要将类字段设为引用:A &class_object;
。
而且由于你必须初始化一个引用它应该引用的对象,你不得不使用成员初始化列表:
B(A &passed_object) : class_object(passed_object)
【讨论】:
您能否修改我的代码以便更好地理解?谢谢 @Francesco 我已经告诉过你必须做出哪些改变,不是吗?将class_object
更改为引用,并相应地更改B()
。
在A &class_object;
中修改了A class_object;
,删除了class_object = passed_object;
并在B(A &passed_object) : class_object(passed_object)
中更改了B(A &passed_object)
...它不起作用
@Francesco 你说的“不起作用”是什么意思?您是否收到编译错误,或者对firstObject
所做的更改不会影响class_object
?
@Francesco 我无法复制:coliru.stacked-crooked.com/a/cb547e6a5e8ee874以上是关于将类对象实例作为参数从 main() 传递给另一个类对象实例的主要内容,如果未能解决你的问题,请参考以下文章