私は期待通りに次のコードが機能しなかったことに少し驚いた:値を返すとき戻り値に仮想関数を使用できますか?
#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;
}
ので、仮想メソッドは動作しませんか?私はヒープ上でリターンクラスを割り当てることに戻すべきでしょうか、それとも良い方法がありますか?
(現実には、私はクラスに応じて異なるイテレータ・クラスのインスタンスを返すために、コンテナクラスを継承し、いくつかの異なるクラスをできるように、これを行うにしたい...)
私もC/C++には新しくありませんが、Cでクラスを持つことは許可されていますか?stdio.hとprintfがあるのでC言語で作業しているようです。 C++を使用している場合、C-ish printfとC++ - ish-cout AFAIKを混ぜるのは良い考えではありませんが、私は完全にはわかりません。私はこれについて他の人たちからもっと知りたいと思っています。 –
あなたが何をしているのか分かっていれば、もちろんCとC++を混在させるのは問題ではありません –