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

标签 c++ polymorphism abstract-class pure-virtual

我有一个基类

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++ 抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14631685/

相关文章:

java - 使用Object类实现数学运算的多态性

c++ - 从c++中的一行字符串中提取数字

C++ find 返回字符串变量 text 中的最后一个单词。字符串 getFirstWord(文本)

c++ - C++ 中 vector 的 .size() 到底做了什么?

c++ - Arduino LED 温度传感器

c++ - 确保指向父类(super class)的指针指向C++中某个子类的对象

c++ - 虚拟或类型转换

c++ - CRTP相对于抽象类的好处?

c++ - 是否可以编写一个抽象类,其中构造函数选择适当的子类在 C++ 中实例化?

c++ - 从抽象类派生类 (C++)