2017-08-08 3 views
0

新しい演算子の前のかっこ - 意味ですか?私は、次のコードを持っている子クラスの場合

class child1 : public parent { 
public: 
    static parent* function1(void) { 
     return (child2*) new child1; 
    } 
    //... 
}; 

Child2が親から継承し、他のクラスです。

新しい演算子の前にかっこを使用する意味は、(child2*)ですか?
関数の機能を説明する最善の方法は何ですか?

+0

私はここに何の意味もないと思うし、たとえ(child2 *)でもポインタキャストを実行します。 'new child1'は' child1 * '型のポインタを返し、' child2 * 'に変換されますが、最終的に' parent * 'になります。関数の戻り値の型は 'parent *'です。 –

答えて

2
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を返します。

0

ここでかっこは、Parent型の静的キャストのみです。

ただし、child1のオブジェクトをchild2のオブジェクトにキャストできないため、ここではコンパイルされません。 dynamic_castを使用してさまざまな種類のオブジェクトをキャストできますが、child2はchild1からではなくParent &から派生しているため、このキャストはnullptrを戻します。

それは エラー1つのエラーC2440とエラーに移入されます:「復帰」:あなたはタイプの親にキャストする必要があります親

」に「child2の*」から変換することはできません。

+0

この例はコンパイルされます。 – Tony

関連する問題