С++ абстрактный класс без чистых виртуальных функций?
У меня есть базовый класс
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;
Однако в настоящее время я столкнулся с конфликтами в отдельном классе.
Я могу все переместить, но мне интересно, есть ли способ сделать абстрактное класс... без чистых виртуальных функций.
Ответы
Ответ 1
Вы можете объявить и реализовать чистый виртуальный деструктор:
class ShapeF
{
public:
virtual ~ShapeF() = 0;
...
};
ShapeF::~ShapeF() {}
Это крошечный шаг от того, что у вас уже есть, и предотвратит непосредственное создание ShapeF
. Производные классы не нуждаются в изменении.
Ответ 2
Попробуйте использовать защищенный конструктор