C++におけるdynamic_castの用途

動的キャストは、C++ での継承関係における型変換演算子で、基本クラスへのポインタまたは参照を、派生クラスへのポインタまたは参照に変換するために使用します。

動的キャスト<目標タイプ>(式)

動的キャストを使用する場合、下記の条件を満たす必要があります。

  1. 仮想関数を持ち、クラスまたはクラスのポインター、参照を持つ、ポリモーフ型。
  2. ターゲット型はソース型の公開派生クラスまたは基本クラスである必要があります。

動的なキャストは実行時に型変換の正当性をチェックし、変換が正当であれば、目的の型のポインタまたは参照を返す。正当でなければ、nullptr(ポインタの場合)を返すか、std::bad_cast例外をスローする(参照の場合)。

例:私は昨日京都に行きました。
適切な日本語の言い換え:私は昨日京都へ出かけました。

class Base {
public:
    virtual void print() {
        cout << "Base class" << endl;
    }
};

class Derived : public Base {
public:
    void print() override {
        cout << "Derived class" << endl;
    }
};

int main() {
    Base* basePtr = new Derived();
    
    Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);
    if (derivedPtr != nullptr) {
        derivedPtr->print(); // 输出:Derived class
    }
    
    delete basePtr;
    return 0;
}

上記の例では、DerivedクラスのオブジェクトポインタをBaseクラスのポインタbasePtrに代入しています。その後、dynamic_castを用いてbasePtrをDerivedクラスのポインタに変換し、変換が成功した場合にDerivedクラスのprint関数を呼び出し、「Derived class」を出力させています。

bannerAds