我有一个基础课

class ShapeF
{
public:
    ShapeF();
    virtual ~ShapeF();

    inline void SetPosition(const Vector2& inPosition) { mPosition.Set(inPosition); }

protected:
    Vector2 mPosition;
}

显然带有一些不完整的代码,但是您明白了。
我将其用作模板,并使用一些有趣的(省略的)枚举来确定我使用的是哪种形状
class RotatedRectangleF : public ShapeF
{
public:
    RotatedRectangleF();
    virtual ~RotatedRectangleF();
protected:
    float mWidth;
    float mHeight;
    float mRotation;
}

ShapeF通过定位和定义类型的枚举来完成其工作。
它具有访问器和更改器,但没有方法。

我可以使ShapeF成为抽象类,以确保没有人尝试实例化ShapeF类型的对象吗?

通常,这可以通过在ShapeF中具有纯虚函数来实现
//ShapeF.h
virtual void Collides(const ShapeF& inShape) = 0;

但是,我目前正在单独类(class)中处理冲突。
我可以移动所有内容,但是我想知道是否有一种方法可以使类抽象..而没有纯虚函数。

最佳答案

您可以声明并实现一个纯虚拟析构函数:

class ShapeF
{
public:
    virtual ~ShapeF() = 0;
    ...
};

ShapeF::~ShapeF() {}

这是您已经拥有的一小步,并且可以防止ShapeF直接实例化。派生类无需更改。

关于c++ - 没有纯虚函数的C++抽象类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14631685/

10-10 17:55