将类对象实例作为参数从main()传递给另一个类对象实例

时间:2018-12-21 17:50:21

标签: c++ class c++11

我在将类对象实例作为参数从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){}

1 个答案:

答案 0 :(得分:2)

由于B()的参数是引用,因此仅将firstObject传递给它确实不会产生副本。

但是您没有引用A class_object;。在B()中为其分配时,就是在进行复制。

您需要将class字段用作参考:A &class_object;

并且由于必须使用其应引用的对象来初始化一个引用,因此您不得不使用成员初始值设定项列表

B(A &passed_object) : class_object(passed_object) {}