Передать экземпляр объекта класса в качестве параметра другому экземпляру объекта класса из main () - PullRequest
0 голосов
/ 21 декабря 2018

У меня проблема с передачей экземпляра объекта класса в качестве параметра другому экземпляру объекта класса из функции 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 эти изменения не видны.

РЕДАКТИРОВАТЬ Основано на подсказках @HolyBlackCat, решенных таким образом:

Изменено A class_object; в A &class_object;, удалено class_object = passed_object; из конструктора и изменено B(A &passed_object){} в * конструктора1016 *

1 Ответ

0 голосов
/ 21 декабря 2018

Поскольку параметр B() является ссылкой, простая передача firstObject ему действительно не делает копию.

Но вы не сделали A class_object; ссылкой.Когда вы присваиваете ему значение в B(), вы делаете копию.

Вам нужно сделать поле класса ссылкой: A &class_object;.

И так как вам нужно инициализировать ссылку с объектом, на который он должен ссылаться, вы вынуждены использовать список инициализатора члена :

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