Min*_*Ant 15 c++ polymorphism abstract-class pure-virtual
我有一个基类
class ShapeF
{
public:
ShapeF();
virtual ~ShapeF();
inline void SetPosition(const Vector2& inPosition) { mPosition.Set(inPosition); }
protected:
Vector2 mPosition;
}
Run Code Online (Sandbox Code Playgroud)
显然有一些遗漏的代码,但你明白了.我使用它作为模板,并使用一些有趣(ommited)枚举,一种方法来确定我正在使用什么样的形状
class RotatedRectangleF : public ShapeF
{
public:
RotatedRectangleF();
virtual ~RotatedRectangleF();
protected:
float mWidth;
float mHeight;
float mRotation;
}
Run Code Online (Sandbox Code Playgroud)
ShapeF通过定位和定义类型的枚举来完成它的工作.它有访问器和mutator,但没有方法.
我可以将ShapeF设为抽象类,以确保没有人尝试并实例化ShapeF类型的对象吗?
通常,这可以通过在ShapeF中使用纯虚函数来实现
//ShapeF.h
virtual void Collides(const ShapeF& inShape) = 0;
Run Code Online (Sandbox Code Playgroud)
但是,我目前正处理一个单独的类中的冲突.我可以移动所有东西,但我想知道是否有一种方法可以使类抽象...没有纯虚函数.
NPE*_*NPE 43
您可以声明并实现纯虚拟析构函数:
class ShapeF
{
public:
virtual ~ShapeF() = 0;
...
};
ShapeF::~ShapeF() {}
Run Code Online (Sandbox Code Playgroud)
它距离您已有的一小步,将阻止ShapeF
直接实例化.派生类不需要更改.