我有一个基础课
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/