让我们假设我们有一个抽象类 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的一些额外方法需要引物函数的特定实现。