次のコードが期待どおりに機能しないことに少し驚いた。
#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;
}
では、値を返すときに仮想メソッドは機能しませんか?ヒープにリターンクラスを割り当てることに戻す必要がありますか、それともより良い方法がありますか?
(実際には、これを実行して、コンテナークラスから継承するいくつかの異なるクラスが、クラスに応じて異なるイテレータークラスインスタンスを返すようにします...)