изменить значение члена данных одного класса из другого класса - PullRequest
1 голос
/ 18 июня 2019
    #include <iostream>
    using namespace std;

    class B{
    public:
        int x;
        void setx(int a){
            x =a;
            cout<<"Inside set "<<x<<endl;
        }
        void show();
    };

    void B::show(){
        cout<<"inside show "<<x<<endl;
    }

    class A{
    public:
        void func();
        void func2();
        B bb;
    };
    void A::func(){
        bb.setx(100);
        bb.show();
    }
    void A::func2(){
        bb.show();
    }
    int main()
    {
       A a;
       B b;
       a.func(); 
       b.show(); 
       a.func2(); 
       return 0;
    }

Изменения применимы только к классу A, где фактическое значение в классе B не меняется.Я пробовал статический, но он показывает ошибку.

ВЫВОД Я ПОЛУЧАЮ: Внутренний набор 100 внутри шоу 100 внутри шоу 0 внутри шоу 100

ВЫХОД I ХОЧУ: Внутренний набор 100 внутри шоу 100 внутри шоу100 внутри шоу 100

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Попробуйте:

int main()
{
   A a;
   B b;
   a.func(); 
   a.bb.show(); 
   a.func2(); 
   return 0;
}

Вы звоните show() на неправильном объекте.Так как a имеет свой собственный bb, вам нужно использовать a.bb, чтобы увидеть изменения.b в main - это другой объект (даже если он того же класса).

0 голосов
/ 18 июня 2019

Класс - это , а не объект.Это определенный пользователем тип данных , к которому можно получить доступ и использовать, создав экземпляр этого класса.Экземпляр класса - это объект.

Теперь в вашей функции main, когда вы создаете экземпляр объекта класса A, записывая A a;, конструктор class A создает экземпляр элемента данных.bb (который имеет тип B).Затем вы создаете еще один объект типа B в вашей функции main, написав B b;.Этот экземпляр класса B не имеет ничего общего с элементом данных bb в вашем class A.Чтобы получить желаемый результат, вам понадобится a.bb.show().

Для ясности:

struct Airplane {};

Airplane a1, a2, a3;

У меня есть 3 самолета, каждый из которых является экземпляром class Airplane, 3 объектатипа Airplane.Изменение a1 не означает изменения a2 и a3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...