Mam klasy bazowejKlasa abstrakcyjna C++ bez czystych funkcji wirtualnych?
class ShapeF
{
public:
ShapeF();
virtual ~ShapeF();
inline void SetPosition(const Vector2& inPosition) { mPosition.Set(inPosition); }
protected:
Vector2 mPosition;
}
Oczywiście z pewnym ommitied kodu, ale masz rację. Używam tego jako szablon, a także z niektórych Fun(), pominięte teksty stałe, sposób określić, jakiego rodzaju kształt używam
class RotatedRectangleF : public ShapeF
{
public:
RotatedRectangleF();
virtual ~RotatedRectangleF();
protected:
float mWidth;
float mHeight;
float mRotation;
}
ShapeF wykonuje swoją pracę z pozycjonowaniem i enum, który określa co typ to. Ma akcesory i mutatory, ale nie ma metod.
Czy mogę uczynić ShapeF klasą abstrakcyjną, aby upewnić się, że nikt nie próbuje i nie tworzy obiektu typu ShapeF?
Zwykle jest to wykonalne poprzez czystą funkcję wirtualną ciągu ShapeF
//ShapeF.h
virtual void Collides(const ShapeF& inShape) = 0;
Jednak jestem obecnie do czynienia z kolizji w klasie oddzielne. Mogę przenieść wszystko, ale zastanawiam się, czy istnieje sposób na streszczenie klasy ... bez czystych wirtualnych funkcji.
Próbujesz reimplement dynamiczny wysyłkę z tagging (enum) i odlewanie ... że staną się wkrótce ból w przyszłości. Zastanowiłbym się nad projektem. –
@ DavidRodríguez-dribeas Pomyślałem, że to najłatwiejsze podejście, static_casting wszystko. Gdybym chciał przeprojektować, całkowicie usunąłbym ShapeF(), z całym tym polimorfizmem, i by każdy kształt był jego własną osobą. Chyba, że masz inną sugestię? – MintyAnt