【问题标题】:Pass class object instance as parameter to another class object instance from main()将类对象实例作为参数从 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成为一个参考.
  • 还需要成员初始化列表

标签: c++ class c++11


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多