return (child2*)new child1;
これはCスタイルのキャストです。 child1 *
からchild2 *
ポインタをある種類のポインタから別のポインタにキャストする場合は、代わりにdynamic_castキーワードを使用する必要があります。
return dynamic_cast< child2 * >(new child1);
C++では、どのようなキャストを行うかを明示するためにいくつかのキャストが用意されています。これは多態的なキャスト(すなわち、vtableを持つ)のためのdynamic_cast、多態的ではない(つまりvtableを持たない)キャストオブジェクトのstatic_cast、オブジェクト内のバイトを別の種類とみなすようにコンパイラに指示するreinterpret_cast const_castはconstまたはvolatileをキャスト(またはconstまたはvolatileオブジェクトにキャスト)するためのconst_castです。
多くのC++プログラマーは、Cスタイルのキャストを使用することはありません。なぜなら、その構文は意図したものではないからです。
child1とchild2が関連しているかどうかも知っておく必要があります。一方は他方の派生クラスでなければなりません。そうでない場合、dynamic_castはnullptrを返します。
私はここに何の意味もないと思うし、たとえ(child2 *)でもポインタキャストを実行します。 'new child1'は' child1 * '型のポインタを返し、' child2 * 'に変換されますが、最終的に' parent * 'になります。関数の戻り値の型は 'parent *'です。 –