我在将类对象实例作为参数从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 的某些属性发生了更改,但在 BI 类中的 passed_object 中看不到这些更改。
编辑基于@HolyBlackCat 提示,以这种方式解决:
修改A class_object;
in A &class_object;
,class_object = passed_object;
从构造函数中移除并更改构造函数的B(A &passed_object){}
inB(A &passed_object) : class_object(passed_object){}
由于参数 ofB()
是一个引用,简单地传递firstObject
给它确实不会复制。
但是你没有做A class_object;
参考。当您在 中分配给它时B()
,您正在制作副本。
您需要使类字段成为参考:A &class_object;
。
并且由于您必须使用它应该引用的对象来初始化引用,因此您不得不使用成员初始化列表:
B(A &passed_object) : class_object(passed_object) {}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句