我在将类对象实例作为参数从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内的pass_object中,我看不到此更改。
编辑 基于@HolyBlackCat技巧,可以通过以下方式解决:
在A class_object;
中修改了A &class_object;
,从构造函数中删除了class_object = passed_object;
,并在B(A &passed_object){}
中修改了构造函数的B(A &passed_object) : class_object(passed_object){}
答案 0 :(得分:2)
由于B()
的参数是引用,因此仅将firstObject
传递给它确实不会产生副本。
但是您没有引用A class_object;
。在B()
中为其分配时,就是在进行复制。
您需要将class字段用作参考:A &class_object;
。
并且由于必须使用其应引用的对象来初始化一个引用,因此您不得不使用成员初始值设定项列表:
B(A &passed_object) : class_object(passed_object) {}