J'étais un peu surpris que le code suivant ne fonctionne pas comme prévu:Les fonctions virtuelles peuvent-elles être utilisées dans les valeurs de retour?
#include "stdio.h"
class RetA
{
public:
virtual void PrintMe() { printf ("Return class A\n"); }
};
class A
{
public:
virtual RetA GetValue() { return RetA(); }
};
class RetB : public RetA
{
public:
virtual void PrintMe() { printf ("Return class B\n"); }
};
class B : public A
{
public:
virtual RetA GetValue() { return RetB(); }
};
int main (int argc, char *argv[])
{
A instance_A;
B instance_B;
RetA ret;
printf ("Test instance A: ");
ret = instance_A.GetValue();
ret.PrintMe(); // Expected result: "Return class A"
printf ("Test instance B: ");
ret = instance_B.GetValue();
ret.PrintMe(); // Expected result: "Return class B"
return 0;
}
Ainsi, les méthodes virtuelles ne fonctionne pas lors du retour d'une valeur? Devrais-je revenir à l'allocation de la classe de retour sur le tas, ou y a-t-il un meilleur moyen?
(En réalité, je veux le faire pour laisser quelques classes différentes héritant d'une classe de conteneur pour revenir différentes instances de classe itérateur selon la classe ...)
Je ne sais pas, comme je suis nouveau à C/C++, mais sommes-nous autorisés à avoir des classes en C, il semble que vous travaillez en C que vous avez stdio.h et printf; Si vous utilisez C++, ce n'est pas une bonne idée de mélanger C-ish printf et C++ - ish-cout AFAIK, mais je ne suis pas tout à fait sûr cependant. J'aimerais en savoir plus à ce sujet auprès des autres. –
si vous savez ce que vous faites, ce n'est pas un problème de "mélanger" C et C++ –