31. C++ Абстрактный класс

Абстрактный класс

Иногда для логического наследования нельзя создать определенный класс родитель, например:
Пусть у нас есть корзина с яблоками, грушами и апельсинами и нам нужно создать классы для описывающие их (в качестве описания просто выведем сбщ. в консоль методом i_called() // я называюсь)

Кто тогда будет классом родителем?
Наследовать апельсин от яблока – нелогично, равно как и от груши.
Для решения подобных вопросов и используются абстрактные классы, поэтому создается класс «фрукты» который будет иметь чисто виртуальный метод (иногда называют чистый виртуальный метод) virtual i_called(); который не будет иметь реализации.
Мы не можем создать объект класса в котором есть чисто виртуальный метод, следовательно вызвать метод Fruit.i_called(); не получится, но мы можем в каждом классе переопределить этот метод и создавать и вызывать эти классы наследники.

class Fruit
{
   public:
    virtual void i_called();
};

class Orange : public Fruit
{
    void i_called() override
    {
        cout<<"I called orange"<<endl;
    }
};

class Apple : public Fruit
{
    void i_called() override
    {
        cout<<"I called apple"<<endl;
    }
};

class Pear : public Fruit
{
    void i_called() override
    {
        cout<<"I called pear"<<endl; } }; void PrintInfo(Fruit *somethink) { somethink->i_called();
}

В main напишем следующий код:

    Orange c_Orange;
    Orange c_Apple;
    Orange c_Pear;

PrintInfo(&c_Orange); //например получим информацию о апельсине

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *