編集はサンプルプログラムとして解くと転載仮想関数は
次のようなシナリオは:
クラス階層:
class Base
{
public:
virtual void output() = 0;
private:
int a;
};
class Derived_1 : public Base
{
public:
virtual void output()
{
cout << "Derived_1" << endl;
}
};
class Derived_2 : public Derived_1
{
public:
virtual void output()
{
cout << "Derived_2" << endl;
}
};
実装:
Derived_2* obj = reinterpret_cast<Derived_2*>(new Derived_1());
obj->output();
"Derived_2"ではなく "Derived_1"を出力します。私はこれがほとんどあなたにとって新しいことではないと確信していますが、私のアプリケーションで私の工場の機能のいくつかを作ったときに考えなかったものでした。
'derived_2'は' derived_1'から継承してはいけませんか? 'Base'から' derived_1'ですか?それは単にタイプミスですか? – amit
コードの重要な部分が欠落しているようです。たとえば、derived_1はBaseから派生していますか(また、base、rightを意味します)。 derived_2はderived_1から派生していますか?ベース? –
私は、あなたの例ではderived_2は何からも派生していないと誤解していますか?派生したものは何も得られません。 –