ポインタで渡されたクラスが継承された子クラスかの判定方法 MFC

C++でポインタ経由で渡されたクラスが特定の子クラスであるかを判定するには、dynamic_castを使用します。dynamic_castは実行時に型の安全なキャストを行い、指定した型へのキャストが不可能な場合はnullptrを返します。これを利用して、ポインタが特定の子クラスのインスタンスを指しているかをチェックできます。

例えば、BaseクラスのポインタbasePtrが、Derivedクラスのインスタンスを指しているかどうかをチェックするには、次のように書きます。

Base* basePtr;  // 何らかの方法で初期化されている
Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);

if (derivedPtr != nullptr) {
    // basePtrはDerivedクラスのインスタンスを指している
} else {
    // basePtrはDerivedクラスのインスタンスを指していない
}

ここで、dynamic_castはポリモーフィズムをサポートするために、クラスが少なくとも1つの仮想関数を持っている必要があります(通常はデストラクタが仮想です)。また、dynamic_castは実行時の型チェックを行うため、コンパイル時ではなく実行時にタイプ安全を確保します。