Classe abstraite ou non, si un attribut est commun à l'ensemble des classes dérivées, il vaut très clairement la peine d'être défini... dans la classe mère...
Et les fonctions (pas forcément virtuelles car n'étant pas pas forcément destinées à être redéfinies) qu'implique cet attribut méritent, elles-aussi, de se trouver dans la classe mère.
Tout cela peut être considéré comme "le tronc commun" reliant l'ensemble des classes dérivées entre elles
Et si cela te permet, parce qu'il est possible de donner une implémentation commune à l'ensemble des classes filles, de transformer une fonction virtuelle pure en une fonction non virtuelle ou en une fonction "simplement" virtuelle (mais non pure), c'est tout bénef
Il ne faut pas oublier que, si une classe mère est abstraite du fait de la présence defonction(s) virtuelle(s) pure(s), tu es obligé de fournir une implémentation pour l'ensemble des fonctions virtuelles pures pour toutes les classes concrètes...
Il serait dommage de devoir faire un "copier / coller" d'un comportement donné dans toutes les classes filles, pour obtenir une classe concrète alors que le seul fait de rajouter un attribut à la classe mère suffirait à... permettre aux classes filles de partager le dit comportement
Cela n'empêche que les comportements qui consistent à gérer la position d'un chien, d'une voiture, d'une bouche d'incendie dans l'espace sont, aux minimum, communs à toute instance d'objet dans l'espace.
Si ta classe mère s'appelle "localisable", tu peux donc, selon ta conception, créer une collection d'objets localisables dans l'espace qui contient le chien occupé à pisser contre la bouche d'incendie, devant laquelle est garée la voiture et qui se trouve à trois maisons du du policier en faction, la voiture, la bouche d'incendie, le chien, le policier en faction et les trois maisons cohabitant dans... la même collection d'objets localisables.
Si ce n'est pas ce que tu veux faire (parce que je peux tirer des conclusions erronées sur base de tes interventions), l'héritage n'a pas lieu d'être

Disons que tu t'étais surtout mal exprimé avec ton
qui sous entendais que le constructeur de la classe mère prenait déjà des arguments nécessaires... au constructeur des classes filles.
Et tu reconnaitra que, ainsi exprimé, ce n'est pas vraiment logique
Ceci dit, j'ai réellement tendance à fuir comme la peste les constructeurs qui demandent trop d'argument (au dela de trois ou quatre, je commence déjà réellement à me poser des questions

)
*Peut être* pourrais tu envisager de créer des structures regroupant les différentes données nécessaires aux classes fille en fonction de leur utilité, ce qui *pourrait* te permettre de limiter très fortement le nombre d'arguments à transmettre
De même, tu pourrais peut être, si l'idée est de passer un nombre plus ou moins déterminé d'objets de types identiques ou à défaut de types compatibles (par exemple, des pointeurs vers des objets localisables, pour reprendre ce qui a été dit jusqu'à présent), envisager de passer des "ranges" représentés par un itérateur de début et un itérateur de fin.
Voillà déjà deux idées relativement simples à mettre en oeuvre pour limiter le nombre d'arguments qu'il te faut passer aux constructeurs des différentes classes fille, mais il y en a sans doute d'autres, et qui seront très certainement de nature à t'éviter bien du soucis

Partager