Спасибо всем, я правда не про абстрактные классы спросил, а про виртуальные
Кстати, насчет абстракнвых кстати на бенче тоже вопрос был:
За точную формалировку не ручаюсь, один из вариантов ответов про них был такой: "их можно юзать as references and pointers"
Ну с поинтерами понятно — в интерфейсном программировании так и делается, а вот использование их как референсов я не видел. И сам не пользовал.
Беда в том еще была что все остальные варианты овета были откровенно бредовые, тако что я поставил галочку здесь.
Потом проверить решил — оказалось правильно поставил
#include <iostream>
#include <vector>
using namespace std;
struct IRun
{
virtual void Run() = 0;
};
struct ISetup
{
virtual void Setup() = 0;
};
struct ITest : public IRun, public ISetup
{
};
class CTest : public ITest
{
public:
CTest() {}
virtual ~CTest() {}
virtual void Setup() {}
virtual void Run() { cout << "CTest::Run()" << endl; }
};
int main()
{
vector <ITest *> data;
for(int i=0; i<3; i++)
data.push_back(new CTest);
ITest &ref = *data.front();
ref.Run();
for(vector <ITest *>::iterator it = data.begin(); it != data.end(); ++it)
delete (*it);
data.clear();
return 0;
}
Ладно, с абстрактными ясность вроде.
Насчет виртуальных базовых классов уточняю вопрос — имет ли смысл их использовать в мономорфной иерархии? Или это закончится плохо, или смысла опять таки нету просто?