Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Поле нельзя будет изменить на протяжении жизни объекта
- // Поле нужно будет проинициализировать при создании объекта
- #include <iostream>
- using namespace std;
- struct Fruit
- {
- int health = 0;
- string type = "fruit";
- };
- struct Apple : public Fruit
- {
- Apple()
- {
- health = 10;
- type = "apple";
- }
- };
- //class Animal
- //{
- //public:
- // void Eat(const Fruit& f)
- // {
- // cout << type << " eats " << f.type << ". " << f.health << "hp." << endl;
- // }
- // protected: //1 способ
- // // могут обращаться только наследники данного класса
- // string type = "animal";
- //};
- class Animal
- {
- public:
- Animal(const string& t = "animal"): type(t)
- {
- /*type = t;*/
- }
- void Eat(const Fruit& f)
- {
- cout << type << " eats " << f.type << ". " << f.health << "hp." << endl;
- }
- // 2 способ, который позволит избежать непреднамеренной модификации какого-то поля в класее является объявление
- // его константным внутри базового класса
- const string type;
- };
- class Cat : public Animal
- {
- public:
- Cat(): Animal("cat") // Из класса - наследника нужно передать свой собственный тип
- {
- //type = "cat"; пытаемся записать новое значение в константуню переменную
- //В С++ все объекты всегда имеют 2 стадии: ИНИЦИАЛИЗАЦИЯ - объект в данный момент создается
- // (он появляется в памяти, его поля инициализируются, но он еще до конца не создан)
- //
- // вторая стадия - это когда уже объект создан (под него выделена память все проинициализировано) и мы с ним работаем
- //До вызова конструктора уже произошла инициализация переменной
- //Список инициализации
- //В тот момент когда мы входим в конструкторе в фигурные скобки на самом деле переменные внутри класса они уже проинициализированы
- //и каждый раз когда мы в них{} что-то записываем мы не инициализируем их, а делаем присваивание нового значения, которое записано поверх старого
- //До того как мы вошли в {} переменная уже инициализирована
- }
- void Meow() const
- {
- cout << "meow! " << endl;
- }
- };
- //void DoMeal(const Animal& a, const Fruit& f)
- //{
- // a.Eat(f);
- // a.type += "*";
- //}
- void DoMeal(Animal& a, Fruit& f)
- {
- a.Eat(f);
- //a.type += "*";
- }
- int main()
- {
- Cat c;
- Apple a;
- DoMeal(c, a);
- DoMeal(c, a);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement