Ho una classe di baseClasse astratta C++ senza pure funzioni virtuali?
class ShapeF
{
public:
ShapeF();
virtual ~ShapeF();
inline void SetPosition(const Vector2& inPosition) { mPosition.Set(inPosition); }
protected:
Vector2 mPosition;
}
Ovviamente con un codice ommitied, ma si ottiene il punto. Io uso questo come un modello, e con un certo divertimento enumerazioni (ommited), un modo per determinare che tipo di forma che sto utilizzando
class RotatedRectangleF : public ShapeF
{
public:
RotatedRectangleF();
virtual ~RotatedRectangleF();
protected:
float mWidth;
float mHeight;
float mRotation;
}
ShapeF fa il suo lavoro con il posizionamento, e un enum che definisce il tipo è Dispone di accessori e mutatori, ma non di metodi.
Posso rendere ShapeF una classe astratta, per garantire che nessuno provi e istanzia un oggetto di tipo ShapeF?
Normalmente, questo è fattibile avendo una funzione virtuale pura all'interno ShapeF
//ShapeF.h
virtual void Collides(const ShapeF& inShape) = 0;
Tuttavia, sono attualmente a che fare con le collisioni in una classe separata. Posso spostare tutto, ma mi chiedo se c'è un modo per fare una classe astratta .. senza le pure funzioni virtuali.
Si sta tentando di reimplementare spedizione dinamico con codifica (enum) e la fusione ... che diventerà un dolore ben presto in futuro. Vorrei riconsiderare il design. –
@ DavidRodríguez-dribeas Ho pensato che questo fosse l'approccio più semplice, static_casting di tutto. Se volessi riprogettare, rimuoverei ShapeF() del tutto, con tutto il polimorfismo, e fare in modo che ogni forma fosse la propria persona. A meno che tu non abbia avuto un suggerimento diverso? – MintyAnt