¿El único punto para implementar el segundo caso es si deseo derivar de un colisionable sin ser un objeto? Si ese es el caso, ¿cuándo es el primer caso favorable desde que el segundo caso ofrece más flexibilidad?¿Qué tipo de herencia es más preferible?
Ambos colisionables tienen solo una función virtual pura y Object es una clase base para los objetos que se pueden dibujar en la pantalla (en mi caso).
^Suponiendo que estoy entendiendo el siguiente código correctamente (no estoy muy seguro de TBH)
class Object
class CollidableObject : Object
class Actor : public CollidableObject
class Object
class Collidable
class Actor : public Object, public Collidable
Editar:
Sobre la base de 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
Primer ejemplo es el segundo caso y el segundo ejemplo es el primer caso. Supongo que ese es el único uso que veo para el primer caso.
@Luchian
Esta va a ser una pregunta diferente a la original ya que su respuesta no fue ninguna de las dos.
En este caso, ¿hay alguna diferencia al cambiar un objeto de una relación is-a a has-a? En cada caso, para verificar colisiones, un objeto debe tener una bandera para saber si se debe verificar la colisión. En su caso, el miembro se puede verificar si es nulo o no, pero en el caso derivado, el objeto mismo dice si puede colisionar o no. En una matriz/árbol, puedo pasar el objeto derivado como argumento o pasar el hitbox como argumento usando un método get().
estar más en profundidad, tengo otra clase - usando el segundo caso
class Hitbox : public Object, public Collidable
y la clase de actor tiene como miembro
class Actor : public Object
{
Hitbox *box;
};
objetos que tienen colisión tendría un Hitbox en su lugar y esto representa su publicación con precisión, creo. Pero lo que me sigue dando es que cuando reviso tu ejemplo de nuevo, ¿significa que Hitbox debería tener un miembro de Collidable en su lugar?
class Hitbox
{
Collidable *collision;
};
Lo que tengo:
Un actor posee una Hitbox que se ocupa de la colisión
Lo Hitbox debe hacer:
Heredar Collidable o
Tienes Collidable como miembro
Actor ya está siguiendo tu convención. ¿Hitbox debería hacer lo mismo?
No tendría que tener un 'CollsableTrackableClickableBlowuppableObject' si lo hizo primero; simplemente sería una clase heredada de 'Collidable',' Trackable', 'Clickable' y' Blowuppable', como la primera, pero no heredarías 'Object' como la primera. No estoy seguro si el primero es más útil; ¿no debería dibujarse todo 'clicable' en la pantalla? Si los tiene todos separados, no puede decir si se puede hacer clic en su 'Objeto' o si su' Clickable' es dibujable. Con la segunda forma, sabes que 'Clickable' es dibujable. –
No tendrías que tener un ... si hicieras el _segundo_ que quise decir. –