общий абстрактный класс для однотипных объектов

Само слово abstract в качестве операторов, директив и т.д. в с++  не встречается, а встречается оператор virtual.

Так вот virtual обозначает, что класс внутри которого объявлена функция с virtual и становится абстрактным. Но, что это значит?...

А оказывается это очень мощная парадигма или технология оптимизации кода с умным английским названием полиморфизм, которым можно объяснить все, любое явление в природе. 

Но на самом деле если один раз попробовать виртуальные функции, то потом за уши не оттащищь, настолько удобная это штуковина.

А приходит понимание необходимости абстракных классов, когда у вас появляется 2 и более однотипных объектов, которыми надо управлять однотипно. Но не писать же почти одинаковый код дважды, трижды и т.д.

Небольшой короткий пример, когда удобно использовать абстрактные классы.

фотка 1



#include <QtCore/QCoreApplication>
#include <QDebug>

class Abstract
{
public:
    virtual void echo()=0;
};

class A1: public Abstract
{
public:
    void echo()
    {
        qDebug() << "class A1";
    }
};


class A2: public Abstract
{
public:
    void echo()
    {
        qDebug() << "class A2";
    }
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    A1 cl1;
    A2 cl2;

    cl1.echo();
    cl2.echo();

    QMap<int, Abstract*> mm;

    mm.insert(0,new A1());
    mm.insert(1,new A2());

    foreach(Abstract* cla, mm)
    {
        cla->echo();
    }
    
    return a.exec();
}

Тут вся прелесть в том , что в результате мы имеем массив указателей однотипных объектов mm.

Однотипно вызываем функцию echo для абстрактного общего класса A, а выполняется функция конкретного наследуемого класса , где реализована специфика поведения конкретного объекта.

фотка 2

Смотрите еще по теме виртуальный деструктор .

И виртуальное множественное наследование.

Файлы для скачивания