L'unico punto per implementare il secondo caso è se voglio derivare da un Collidable senza essere un oggetto? Se questo è il caso, quando è il primo caso mai favorevole dal momento che il secondo caso offre maggiore flessibilità.Quale tipo di eredità è più preferibile?
Entrambi gli oggetti collidabili hanno solo una funzione virtuale pura e Object è una classe base per oggetti che possono essere disegnati sullo schermo (nel mio caso).
^Supponendo che io sto capendo il seguente codice correttamente (io non sono troppo sicuro TBH)
class Object
class CollidableObject : Object
class Actor : public CollidableObject
class Object
class Collidable
class Actor : public Object, public Collidable
Edit:
Sulla base di Matt/Seth
class Object
class Collidable
class Clickable
class Trackable
class BlowUppable
class Actor : public Object, public Collidable, public Clickable, public Trackable,
public BlowUppable
class SomeObjectThatIsTakenForGrantedThatEverythingElseIsInherited : public Actor
Primo esempio è il secondo caso e il secondo esempio è il primo caso. Immagino che questo sia l'unico uso che vedo per il primo caso.
@Luchian
Questa sarà una domanda diversa dall'originale poiché la tua risposta non è stata né l'una né l'altra.
In questo caso, c'è una differenza nel cambiare un oggetto da una relazione is-a a ha-a? In ogni caso, per verificare la presenza di collisioni, un oggetto deve avere una bandiera per sapere se la collisione deve essere controllata. Nel tuo caso, il membro può essere controllato se è nullo o no, ma nel caso derivato, l'oggetto stesso dice se può scontrarsi o meno. In una matrice/albero, posso passare l'oggetto derivato come argomento o passare l'hitbox come argomento usando un metodo get().
Per essere più in profondità, ho un'altra classe - utilizzando il secondo caso
class Hitbox : public Object, public Collidable
e la classe attore ha come membro
class Actor : public Object
{
Hitbox *box;
};
oggetti che hanno collisione avrebbe un hitbox invece e questo rappresenta il tuo post con precisione penso. Ma quello che mi sta ancora facendo è che quando ripasso il tuo esempio, vuol dire che Hitbox dovrebbe avere un membro Collidable?
class Hitbox
{
Collidable *collision;
};
Quello che ho:
Un attore detiene una Hitbox che gestisce collisione
Cosa Hitbox dovrebbe fare:
Eredita Collidable o
Hanno Collidable come membro
attore sta già seguendo la tua convention Hitbox dovrebbe fare lo stesso?
Non si dovrebbe avere un 'CollidableTrackableClickableBlowuppableObject' se si è fatto il primo; sarebbe solo una classe ereditata da "Collidable',' Trackable', 'Clickable', e' Blowuppable', come la prima, ma non si eredita 'Object' come la prima. Non sono sicuro che il primo sia più utile; non tutti i 'Clickable's possono essere disegnabili sullo schermo? Se li hai tutti separati, non puoi sapere se il tuo 'Object' è cliccabile o se il tuo' Clickable' è disegnabile. Con il secondo modo, sai che 'Clickable' è disegnabile. –
Non dovresti avere un ... se hai fatto il secondo, volevo dire. –