重複の可能性:
クラスとその子の中のクラスタイプを見つけます
基本クラス内で呼び出すメソッドがあり、新しい要件が発生しました。このメソッド内で、どのサブクラスから派生したかを知る必要があります。これが可能かどうか知っていますか?
重複の可能性:
クラスとその子の中のクラスタイプを見つけます
基本クラス内で呼び出すメソッドがあり、新しい要件が発生しました。このメソッド内で、どのサブクラスから派生したかを知る必要があります。これが可能かどうか知っていますか?
それが仮想関数の目的です。派生クラスで仮想関数をオーバーライドするということは、基本クラスが派生型について何も知る必要がないことを意味します。一般に、基本クラスが派生クラスについて知る必要がある場合、それは設計ミスを反映しています。
信頼できる方法で見つけることは不可能です。実行時にロードされる共有ライブラリについて考えてみてください。このようなものにどのように反応しますか?
上記の回答でアプローチを取る場合
DerivedClass *p = dynamic_cast<DerivedClass*>(this);
if (p != null) { ...use p... }
型がわからないため、コンパイル時に派生クラスがわからない場合には対応できません。
C++ にはリフレクションの強い概念がないため、「いいえ」と答えます。
RTTIを使用して確認できます。
DerivedClass *p = dynamic_cast<DerivedClass*>(this);
if (p != null) { ...use p... }
ただし、おそらくこれはやりたくないでしょう。ほとんどの場合、基本クラスのオーバーライドされたメソッドを使用するより良い方法があります。