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

Когда удобно использовать абстрактные классы.

фотка 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, а выполняется функция конкретного наследуемого класса , где реализована специфика поведения конкретного объекта.

фотка 1

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

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

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