【发布时间】:2013-01-15 21:40:01
【问题描述】:
我有一个基类
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;
但是,我目前正在一个单独的班级中处理碰撞。 我可以把所有东西都移过来,但我想知道是否有办法让一个类抽象......没有纯虚函数。
【问题讨论】:
-
您正在尝试使用标记(枚举)和强制转换重新实现动态调度......这将在未来很快成为一个痛苦。我会重新考虑设计。
-
@DavidRodríguez-dribeas 我认为这是最简单的方法,static_casting 一切。如果我想重新设计,我会完全删除 ShapeF() ,其中包含所有多态性,并让每个形状都是它自己的人。除非你有不同的建议?
标签: c++ polymorphism abstract-class pure-virtual