Как изменить композицию объектов изнутри объектов - PullRequest
0 голосов
/ 22 марта 2019

Если у вас есть класс, состоящий из других подклассов, как сделать так, чтобы, если вы изменяете свойство подкласса, это изменение отражалось в классе композиции?(Извините, это основной вопрос, я не очень хорошо разбираюсь с объектами)

Например, скажем, у меня есть еда, состоящая из двух сэндвич-объектов.И у еды, и у бутербродов есть переменные калории, но если я добавлю немного сыра к одному из объектов сэндвича, я хочу, чтобы это каким-то образом обновило количество калорий в еде.Есть ли хороший способ добиться этого?

В следующем (C ++) коде, например, добавление сыра в основное блюдо не обновляет калории в еде.(Кстати, я понятия не имею, сколько калорий в реальной еде)

#include <iostream>

struct Sandwich
{
    int calories = 0;

    Sandwich(int calories): calories {calories} {}

    void AddCheese() { calories += 50; }
};

struct Meal
{
    Sandwich entree;
    Sandwich main;
    int calories = 0;

    Meal(const Sandwich& entree, const Sandwich& main)
    : entree {entree}, main {main}, calories {entree.calories + main.calories}  {}
};

int main()
{
    Sandwich toastie(500);
    Sandwich hoagie(1500);

    Meal lunch(toastie, hoagie);

    lunch.main.AddCheese();

    std::cout << "lunch.entree.calories = " << lunch.entree.calories << std::endl;     
    std::cout << "lunch.main.calories = " << lunch.main.calories << std::endl; 
    std::cout << "lunch.calories = " << lunch.calories << std::endl; 

    return 0;
}

Вывод:

lunch.entree.calories = 500
lunch.main.calories = 1550
lunch.calories = 2000
...