Чистые виртуальные функции и абстрактные классы

Последнее обновление: 16.03.2023
Упражнение 1

Определите абстрактный класс Animal, который представляет животное и который имеет две переменных - name (кличка животного) и weight (вес животного). Также определите в классе Animal чистую виртуальную функцию makeSound, которая представляет произносимые животным звуки, и функцию print, которая выводит на консоль имя и вес животного.

Определите классы Cat (кошка) и Dog (собака), которые наследуются от класса Animal и которые переопределяют функцию makeSound

Решение
#include <iostream>
  
class Animal
{
public:
    Animal(std::string name, double weight): name{name}, weight{weight}
    {}
    void print()
    {
        std::cout << "Name: " << name << "\tWeight: " << weight << "kg" << std::endl;
    }
	virtual void makeSound() const = 0;     //  
private:
    std::string name;   // кличка животного
    double weight;      // вес животного
};
class Cat : public Animal  // котэ
{
public:
    Cat(std::string name, double weight): Animal{name, weight}
    { }
    virtual void makeSound() const
    {
        std::cout << "Miau, miau. I am a cool kote" << std::endl;
    }
};
class Dog : public Animal  // котэ
{
public:
    Dog(std::string name, double weight): Animal{name, weight}
    { }
    virtual void makeSound() const
    {
        std::cout << "Gov gov, I am a dog" << std::endl;
    }
};
 
int main()
{
    Cat murzik{"Murzik", 15};
    Dog pushok{"Pushok", 20};

    murzik.print();
    murzik.makeSound();

    pushok.print();
    pushok.makeSound();
}

Консольный вывод:

Name: Murzik    Weight: 15kg
Miau, miau. I am a cool kote
Name: Pushok    Weight: 20kg
Gov gov, I am a dog
Дополнительные материалы
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850