繁体   English   中英

没有纯虚函数的C++抽象类?

[英]C++ abstract class without pure virtual functions?

我有一个基类

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 ShapeF
{
public:
    virtual ~ShapeF() = 0;
    ...
};

ShapeF::~ShapeF() {}

这是您已有的一小步,并且会阻止直接实例化ShapeF 派生类不需要更改。

尝试使用受保护的构造函数

如果您的编译器是 Visual C++,那么还有一个“抽象”关键字:

class MyClass abstract
{
    // whatever...
};

虽然 AFAIK 它不会在其他编译器上编译,但它是 Microsoft 自定义关键字之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM