将类对象实例作为参数从 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 &amp;class_object;中的A class_object;,从构造函数中删除了class_object = passed_object;并更改了B(A &amp;passed_object) : class_object(passed_object)中构造函数的B(A &amp;passed_object)

【问题讨论】:

如果你想让class_object引用一些A类型的对象(例如在main中创建的对象),你需要使class_object成为一个参考. 还需要成员初始化列表 【参考方案1】:

由于B() 的参数是一个引用,所以简单地将firstObject 传递给它确实不会复制。

但您没有将A class_object; 设为引用。当您在 B() 中分配给它时,您正在制作副本。

您需要将类字段设为引用:A &amp;class_object;

而且由于你必须初始化一个引用它应该引用的对象,你不得不使用成员初始化列表

B(A &passed_object) : class_object(passed_object) 

【讨论】:

您能否修改我的代码以便更好地理解?谢谢 @Francesco 我已经告诉过你必须做出哪些改变,不是吗?将class_object 更改为引用,并相应地更改B() A &amp;class_object; 中修改了A class_object;,删除了class_object = passed_object; 并在B(A &amp;passed_object) : class_object(passed_object) 中更改了B(A &amp;passed_object)...它不起作用 @Francesco 你说的“不起作用”是什么意思?您是否收到编译错误,或者对firstObject 所做的更改不会影响class_object @Francesco 我无法复制:coliru.stacked-crooked.com/a/cb547e6a5e8ee874

以上是关于将类对象实例作为参数从 main() 传递给另一个类对象实例的主要内容,如果未能解决你的问题,请参考以下文章

使用 Joblib 将类对象实例作为输入参数的并行化函数

如何将类列表作为参数传递?

如何将类类型作为函数参数传递

C ++将类的引用传递给另一个类

如何将类成员变量传递给另一个组件角度?

使用 React Hooks 获取帖子并将它们作为附加道具传递给另一个组件