#include <QtCore/QCoreApplication>
#include <QDebug>
class Abstract
{
public:
virtual void echo()
{
qDebug() << " class Abstract";
}
//virtual void echo2()=0;
};
class A1: public Abstract
{
public:
A1()
{
qDebug() << "constructor A1";
}
void echo()
{
qDebug() << "class A1";
}
};
class A2: public Abstract
{
public:
A2()
{
qDebug() << "constructor A2";
}
void echo()
{
qDebug() << "class A2";
Abstract::echo();
}
};
class Common: public A2, public A1
{
public:
Common(): A2(),A1()
{
qDebug() << "constructor Common";
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Common com;
A2 *a2 = &com;
a2->echo();
A1 *a1 = &com;
a1->echo();
return a.exec();
}
Тут главный результат , что присваивание указателя срабатывает корректно:
A2 *a2 = &com;
То есть имея указатель на объект потомок мы корректно получаем указатель на один из объектов родителей и корректно вызываем именно его функцию.