解決済みを編集してサンプルプログラムとして再投稿
シナリオは次のとおりでした。
クラス階層:
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」が出力されます。これはほとんどの人にとって目新しいことではないと思いますが、アプリケーションでいくつかのファクトリ関数を作成するときに考えたこともありませんでした。