dynamic_castの必要性がいまいち良く分かりません。
必ずしも必要ないのかも、とも思います。
例えば以下のような場合。
class B
{
public:
virtual void f(){cout << "bbb" << endl;}
};
class D : public B
{
public:
void f(){cout << "aaa" << endl;}
};
int main()
{
B b, *bp;
D d, *dp;
bp = &d;
bp->f();
dp = dynamic_cast<D *>(bp); //(1)
//dp = &d; //(2)
dp->f();
return 0;
}
(1)と(2)はどちらでも同じ意味だと思います。
(2)でいいのなら、(1)のダイナミックキャストをわざわざ用意する必要はないと思います。
どなたかダイナミックキャストの必要性を教えていただけないでしょうか。
No.1ベストアンサー
- 回答日時:
(2)の部分は
dp = &d;
では、dynamic_cast との比較になっていませんが、
dp = (D*)bp;
の間違いですかね?
別の型を経由しないとキャストの意味はないですし。
そうだという前提で話を進めますが、さらに、
class E : public B
{
public:
void f(){count<< "ccc" << endl;}
void g(){cout << "ddd" << endl;}
};
といった感じで別の派生クラスがあったとします。
このとき、
E e; B *bp = &e;
E *ep = (E*)bp; ep->g();
というコードは動作しますが、
D d; B *bp = &d;
E *ep = (E*)bp; ep->g();
は、epが指す先がクラスEではないので、コンパイルは出来ますがまともに動作しません。
dynamic_cast は正しくキャスト可能かどうかチェックできますから、
bpが
> E e; B *bp = &e;
> D d; B *bp = &d;
のどちらの場合でも
E *ep = dynamic_cast<E *>(bp); if (ep != NULL) {ep->g();}
というコードは問題なく動作します。
このように、派生したクラスを派生元クラスのポインタで管理しているときにはクラスチェックとして dynamic_cast が使えます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java eclipse実行ができない 2 2022/07/27 04:47
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java java final 1 2022/06/10 22:49
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数内の変数に<summary>コメン...
-
範囲外の数値を代入したらエラ...
-
クラス間でのデータ参照
-
親クラスから子クラスへアクセス。
-
import と extends について
-
実行可能jarファイルのファイル...
-
Java リフレクションについて
-
無名パッケージからのインポート
-
リフレクション
-
オブジェクトのデータをもとにX...
-
C#でほかのファイルにある自作...
-
java-別クラスの変数の使い方を...
-
サブクラスで.newInstance()で...
-
C#のクラスライブラリでメッセ...
-
c++,ある関数のクラスから別の...
-
ひとつのファイルにクラスは1つ?
-
違うクラスからの変数の共有化
-
Java
-
Javaでswingの画面変わる際に他...
-
eclipse3.0 元に戻す最大回数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数内の変数に<summary>コメン...
-
クラス間でのデータ参照
-
c++,ある関数のクラスから別の...
-
範囲外の数値を代入したらエラ...
-
C#にて別クラスの関数を使いたい
-
C#でほかのファイルにある自作...
-
C++でfriendクラスにしているの...
-
java-別クラスの変数の使い方を...
-
親クラスから子クラスへアクセス。
-
構造 他のクラスの構造体を別...
-
ひとつのファイルにクラスは1つ?
-
Java
-
import と extends について
-
継承したクラス側のクラス名の取得
-
Java リフレクションについて
-
C#のクラスライブラリでメッセ...
-
SwingでgetContentPaneのエラー...
-
アップキャスト、ダウンキャス...
-
C# インターフェイスの実装
-
visual studioのデザイナ画面で...
おすすめ情報