pab*_*ker 11 c++ abstract-class pure-virtual
让我们假设我们有一个抽象类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
};
Run Code Online (Sandbox Code Playgroud)
更新:作为一个例子,在我的例子中,我想从Qt框架的QAbstractTableModel类创建一些派生类.要重用一些代码,我想创建一个中间抽象类.
QAbstractTableModel <- MyAbstractModel <- MyModelA (or MyModelB ... etc).
Run Code Online (Sandbox Code Playgroud)
但是,我想确保模型(MyModelA,MyModelB)重新实现QAbstractTableModel的一些虚函数(如:: index()函数),因为MyAbstractModel的一些额外方法需要引物函数的特定实现.
HDJ*_*MAI 11
§10.4说:
5 [注意:抽象类可以从非抽象的类派生,纯虚函数可以覆盖不纯的虚函数. - 尾注]
所以完全可以做到这一点.
用例示例:
您可以拥有一个基本类型,它是作为具体类型(基类)实现的.现在,对于子类型,我们可能需要进一步的附加信息.因此,我们可以有一个抽象的中间对象来满足我们的需求.