Предположим, что мы имеем абстрактный класс NonEditableSuperBase
, из которого мы создаем еще один абстрактный класс MyBase
.
Первый класс NonEditableSuperBase
имеет виртуальную функцию (не чисто виртуальную). Однако я хочу заставить это, если кто-то создает класс, который происходит от MyBase
, он должен предоставить реализацию указанной функции.
Следовательно, моя идея состоит в том, чтобы определить функцию как чисто виртуальную в MyBase
.
Мой вопрос: Это плохая идея, учитывая, что она была просто виртуальной в NonEditableSuperBase
?
Пример:
//NonEditableSuperBase.h
class NonEditableSuperBase
{
...
public:
virtual int someMethod(); //It has an implementation, suppose {return 42;}
};
//MyBase.h
class MyBase: public NonEditableSuperBase
{
public:
explicit MyBase();
virtual ~MyBase() = default;
virtual int someMethod() = 0; //I make it pure virtual
};
//MyBase.cpp
MyBase::MyBase() : NonEditableSuperBase() { }
//Now someone creates a derived class from MyBase.
class SuperDerived : public MyBase
{
public:
explicit SuperDerived();
int someMethod(); //The user must create an implementation of the function
};
Обновление: Например, в моем случае я хочу создать некоторые производные классы из класса QAbstractTableModel для структуры Qt. Чтобы повторно использовать некоторый код, я хочу создать промежуточный абстрактный класс.
QAbstractTableModel <- MyAbstractModel <- MyModelA (or MyModelB ... etc).
Однако я хочу, чтобы модели (MyModelA, MyModelB) повторно реализовали некоторые из виртуальных функций QAbstractTableModel (например, функция:: index()), поскольку некоторые из дополнительных методов MyAbstractModel требуют определенных реализаций праймерные функции.