をアップキャスト:(母親、抽象的に)、そしてBとC、暗黙的な変換のは、私は三つのクラスがあるとしましょう
ので、BとC Aの子供はAから継承する(パブリック継承) 。 私はポインタのリストを持っています。これにはBまたはCのポインタがあります。
質問:キャスティング/コンバートを実行するときの優先スタイルですか?
class A {};
class B : public A {};
class C : public A {};
B* objB = new B();
C* objC = new C();
std::list<A*> myList;
// Option A: static cast conversion
myList.push_back(static_cast<A*> (objB));
myList.push_back(static_cast<A*> (objC));
// Option B: implicit conversion
myList.push_back(objB);
myList.push_back(objC);
// Option C: C-style conversion (I understand that this is evil and must be avoided)
myList.push_back((A*) objB);
myList.push_back((A*) objC);
したがって、明快さ(コードスタイル)と安全性の面でどちらが優れていますか?私はstatic_castを検索する方が簡単だと理解していますが、この場合は暗黙の変換で十分です。
これは私が必要とする回答です。アップキャスト時にはstatic_castが、ダウンキャスト時にはyesとなります。ありがとうございました! (そして非常に速い答えです!) – fern17
@ fern17また、ダウンキャストのときには、それがBかCかどうかは分からないかもしれないことに注意してください。それは 'dynamic_cast'のためです。 – JorenHeit
はい、私は知っています、それを明示してくれてありがとう(将来この質問に戻る私の人) – fern17