Ce qui suit est un échantillon approximatif de ce que le code ressemble à la question, la question est de savoir comment puis-je avoir dérivéOne et dérivétwo avoir un maintenant je sais qu'il y a ceci, mais ça ne fonctionnera pas à mes fins. p>
3 Réponses :
Vous pouvez faire quelque chose comme ceci: puis, lors de l'application opérateur <<< / code> sur
base code>, il appellera le dérivé Méthode de sortie. P> P>
Notez l'utilisation d'une référence dans la liste des paramètres pour opérateur << () code>.
aussi loin que votre problème est décrit, vous avez une collection d'objets polymorphes alloués dynamiquement.
La solution peut changer en fonction de la manière dont ces objets adhérent à certaines disciplines de conception: P>
La situation peut devenir très complexe en fonction de la situation et, selon vous si vous pouvez tolérer ou non une production multiple d'un même objet et comment pouvez-vous casser des boucles éventuelles. P>
une première chose que vous Impossible de faire est d'utiliser Si vous êtes en situation de situation (1.), vous avez juste besoin d'une fonction virtuelle prise comme ceci: p> base code> en tant que paramètre de valeur (comme dans votre, car cela crée une copie (admettre que vos objets sont copieux: s'ils se réfèrent à un autre objet, que fait une copie? multiplie les chemins? L'objet référé aussi bien?) p>
std :: ostream et code>, pour être remplacé dans toute la feuille Objets. Ensuite, vous avez besoin d'une surcharge pour
opérateur et une autre pour
(std :: ostream &, const std std :: vecteur
class Derived3: public Base
{
...
Base* ptrOwnedobject;
};
Voici une solution similaire à d'autres réponses, mais la méthode virtuelle est privée: p> exemple h3>
sortie h3>
Cela fait longtemps que je devais cela, mais votre réponse m'a aidé à me souvenir, merci :)
Avez-vous essayé d'avoir la déclaration code> code> pour chacune des classes dérivées dans chacune d'elles? Je ne suis pas certain i>, mais je pense que ADL trouvera les fonctions correctes pour vous si vous faites cela.
S'il vous plaît voir la réponse à Stackoverflow.com/questions/2059058/... .
@Draboonwraith: Je ne pense pas que ADL fonctionnera là-bas, car ADL fonctionne sur le type statique de la base code> code>, pas le type dynamique.