Если у вас есть класс, состоящий из других подклассов, как сделать так, чтобы, если вы изменяете свойство подкласса, это изменение отражалось в классе композиции?(Извините, это основной вопрос, я не очень хорошо разбираюсь с объектами)
Например, скажем, у меня есть еда, состоящая из двух сэндвич-объектов.И у еды, и у бутербродов есть переменные калории, но если я добавлю немного сыра к одному из объектов сэндвича, я хочу, чтобы это каким-то образом обновило количество калорий в еде.Есть ли хороший способ добиться этого?
В следующем (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