Forum Programmation.c++ Pour ma culture générale...

Posté par  .
Étiquettes : aucune
0
3
sept.
2004
Soient :
- une classe interface IInterface (i.e. avec au moins une méthode purement virtuelle =0)
- une classe Nenfant qui honore cette interface IInterface
- une classe IInterfaceS qui hérite de std::vector<IInterface*>
- une classe NenfantS qui hérite de std::vector<Nenfant*>

Y a-t-il un moyen pour que la classe NenfantS puisse être vue comme une classe IInterfaceS ?
Y a-t-il un moyen pour contourner l'éventuelle réponse négative à la première question ? (Même si c'est un gros hack pas beau, ou alors s'il faut introduire une autre classe qui fasse le lien de "parenté", ou un proxy, ou ... je sais pas moi :) )

En gros, ce que j'aimerais savoir c'est si une fonction killerFct telle que :

void killerFct( const IInterfaceS& interfaces );

pourrait éventuellement accepter comme argument un objet NenfantS alors qu'il n'y a pas explicitement de lien de parenté entre les contenants, mais qu'il en existe [des liens de parenté] entre les contenus.

Bon ben... à toi de jouer Super Gourou C++ :)
  • # Vais-je dire une connerie ?

    Posté par  . Évalué à 4.

    Sans doute, le week-end approche, je fatigue.
    Mais...
    Pourquoi vouloir créer cette classe NenfantS ???
    Qu'apporte-elle par rapport à IInterfaceS ?
    Puisque IInterfaceS utilise des IInterface, et que Nenfant dérive de IInterface, IInterfaceS peut aussi utiliser directement des Nenfant ?

    Quel est ton besoin précis ? NenfantS doit-elle exécuter quelque chose de spécifique à Nenfant en plus de ce que ferait IInterfaceS ?
    • [^] # Re: Vais-je dire une connerie ?

      Posté par  . Évalué à 2.

      Euh non, je crois pas qu'il y ait de conneries.
      L'avantage que je vois, ce serait d'eviter des dynamic_cast de Nenfant lorsque tu recuperes un pointeur vers IInterfaceS, rempli au prealable avec des Nenfant.

      Je suis jamais tres a l'aise lorsque je vois beaucoup de dynamic_cast dans mon code.
      Mais si on peut pas y echapper...
  • # Re : Pour ma culture générale...

    Posté par  . Évalué à 2.

    Y a-t-il un moyen pour que la classe NenfantS puisse être vue comme une classe IInterfaceS ?

    Non, voir les points 21.2 et 21.3 de la FAQ Lite (http://www.parashift.com/c++-faq-lite/(...) pour les anglophones, http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index-fr.html(...) pour les autres)

    Pour l'héritage :

    une classe IInterfaceS qui hérite de std::vector<IInterface*>

    une classe NenfantS qui hérite de std::vector<Nenfant*>


    C'est déconseillé d'hériter des conteneurs de la STL, surtout si tu utilises le polymorphisme et les fonctions dynamiques : les conteneurs n'ont pas de destructeur virtuel, donc si tu en hérites et que tu veux faire jouer le polymorphisme sur ces conteneurs, tu te retrouves avec une fuite de mémoire.

    As-tu vraiment besoin de rajouter des fonctions à std::vector ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.