- ベストアンサー
アップキャスト、ダウンキャストのメリットについて
アップキャストは、なぜ使用するのでしょうか。 <ソース;アップキャストのソース> //派生クラスのオブジェクトw宣言する。 MyClass3 mc3("パラメータ1","パラメータ2","パラメータ3"); //基本クラスのオブジェクトを宣言する。 MyClass2 mc2; //派生クラスのオブジェクトを基本クラスに代入する。 mc2 = mc3; 上記ソースの流れをすることのメリットがわからないのです。 派生クラスを、基本クラスに代入することでどのようなメリットが生まれるのでしょうか…。 (ダウンキャストも今いちするメリットが見えないのですが・・・。) ご教授お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
class 書けるもの { public: virtual void 書く() =0; }; class 黒板 : public 書けるもの { public: virtual void 書く() { .... } }; class USBメモリ : public 書けるもの { public: virtual void 書く() { .... } }; ... 書けるもの* いろいろ[N]; // この中に黒板、USBメモリ... ありとあらゆる書けるもの for ( int i = 0; i < N; ++i ) { 書けるもの* writable = いろいろ[i]; writeble->書く(); } なんてな。 書けるものでありさえすれば、それが何かを知らぬまま 書く() ことができます。
その他の回答 (2)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> 書かれているソースはアップキャストでなく、コピーコンストラクタのような。 ...ホントだ。 てかコピー・オペレータですが(コピー・コンストラクタではなく)。 # コピー・コンストラクタなら MyClass2 mc2 = mc3;
- wormhole
- ベストアンサー率28% (1626/5665)
書かれているソースはアップキャストでなく、コピーコンストラクタのような。
お礼
確かに見直すとコピーコンストラクタを書いてる気がします。 あれから考えてみて、アップキャストするとレイトバインディングとかできるかなと思ってきました。 もう少し考えてみることにします。 ありがとうございました。
お礼
>書けるものでありさえすれば、それが何かを知らぬまま 書く() ことができます。 継承して仮想関数で書くまでは、わかったのですが 「いろいろ」の部分で分からなくなってしまいました。 少し考えてみることにします。 ありがとうございました。