Constructeur intermédiaire

Constructeur intermédiaire

par Jean-Baptiste Bruno Marie Valentin,
Number of replies: 1

Bonjour, 

pour une classe virtuel, j'ai compris que dans la sous-sous- classe (la dernière) il faut initialiser dans le constructeur la super class virtuel, mais pour les classes intermédiaires, comment est-ce qu'on écrit les constructeurs.  ce que j'ai fait pour Marchand une classe intermédiaire (analogue pour pirate)

Dans mon cas c'est pour l'exercice Bateau.cc (semaine 6), la classe pirate et marchand ne rajoute aucun attribut à la super classe Navire, pourtant la seul manière que j'ai trouvé qui compilait pour mon constructeur de ma sous-sous-classe est de faire. 

Ce qui rend tout le but d'avoir une classe virtuelle inutile et d'ailleur le correcteur automatique du MOOC affiche que j'utilise une fonction qui a été delete (les constructeurs de Pirate et Marchand).

si j'essaie de suivre la méthode du cours en écrivant Navire(x,y,p), Pirate(), Marchand() mais ca ne marche pas non plus. je ne sais que faire.

In reply to Jean-Baptiste Bruno Marie Valentin

Re: Constructeur intermédiaire

par Jean-Cédric Chappelier,

Oui il faut aussi appeler les constructeurs des classes intermédiaires.
Non cela n'enlève aucun intérêt car la partie classe virtuelle de ces constructeurs est ignorée (elle doit avoir été faite au préalable par la sous-sous-classe) mais ces constructeurs pourraient (dans le cas général) avoir leur partie propre (ce n'est pas le cas ici ce qui du coup semble nous obliger à faire qqchose d'inutile ; qui est inutile ici (puisque ces constructeurs ne font en fait rien dans cet appel depuis la sous-sous-classe) mais pourrait bien être utile dans le cas général).
Et non ces constructeur ne sont pas deleted...
...par contre le constructeur de copie peut être. A vous de voir quel constructeur est deleted.

Autre conseil (totalement lié ;-) ) : penser à passer les arguments par const& plutôt que par copie lorsque c'est pertinent.