Bien sûr, vous pouvez, je me demande simplement s'il est rationnel de concevoir de cette manière.
Je fais un clone en petits groupes et je faisais du design de classe. Je voulais utiliser l'héritage, même si je n'y suis pas obligé, pour appliquer ce que j'ai appris en C ++. Je pensais à la conception des classes et j'ai trouvé quelque chose comme ça:
GameObject -> classe de base (se compose de membres de données comme les décalages x et y et d'un vecteur de SDL_Surface *
MovableObject: GameObject -> classe abstraite + classe dérivée de GameObject (une méthode void move () = 0;)
NonMovableObject: GameObject -> classe vide ... pas de méthodes ou membres de données autres que constructeur et destructeur (du moins pour l'instant?).
Plus tard, je prévoyais de dériver une classe de NonMovableObject, comme Tileset: NonMovableObject. Je me demandais simplement si des classes abstraites "vides" ou simplement des classes vides étaient souvent utilisées ... Je remarque que la façon dont je fais cela, je crée juste la classe NonMovableObject juste pour la catégorisation.
Je sais que je réfléchis trop juste pour faire un clone en petits groupes, mais je me concentre moins sur le jeu et plus sur l'utilisation de l'héritage et la conception d'une sorte de cadre de jeu.
la source
MovableObject
ni l' autre neNonMovableObject
peuvent hériter l'un de l'autre, ils ont tous deux un emplacement; en tant que tels, ils devraient tous deux être consommables par du code qui, par exemple, veut diriger le but d'un monstre vers un objet sans se soucier de savoir si cet objet pourrait se déplacer ou non.Il a des applications en C # comme ammoQ mentionné, mais en C ++ la seule application serait si vous vouliez avoir une liste de pointeurs NonMovableObject.
Mais alors j'imagine que vous détruisez les objets via le pointeur NonMoveableObject, auquel cas vous aurez besoin de destructeurs virtuels, et ce ne sera plus une classe vide. :)
la source
Une situation où vous pourriez voir ceci est où vous voulez qu'une collection fortement tyuped contienne des types autrement hétérogènes. Je ne dis pas que c'est une excellente idée, cela peut indiquer une abstraction faible ou une mauvaise conception, mais cela arrive. Comme vous le mentionnez, c'est une façon de classer les choses et cela peut être utile et parfaitement valable.
Par exemple, vous voulez qu'une collection contienne des chats et des chiens. Dans votre conception, vous décidez qu'ils ont beaucoup en commun, alors ayez une classe de base de Mamal et utilisez ce type dans votre collection (par exemple, List). Tout bon. Ensuite, vous décidez que vous souhaitez ajouter des grenouilles à votre collection, mais ce ne sont pas des mammifères, donc une façon de faire serait de faire de la sous-classe des grenouilles et des mamals des animaux, mais peut-être que vous ne pouvez pas penser à beaucoup de choses que les grenouilles et les mamals ont dans commun donc l'animal reste vide. Vous tapez alors votre collection avec Animal au lieu de Mamal et tout va bien.
Dans la vraie vie, je trouve que même si je crée tôt ou tard une classe de base vide, certaines fonctionnalités s'y retrouvent, mais il y a certainement des moments où elles existent.
la source