• ベストアンサー

アップキャスト、ダウンキャストのメリットについて

アップキャストは、なぜ使用するのでしょうか。 <ソース;アップキャストのソース> //派生クラスのオブジェクトw宣言する。 MyClass3 mc3("パラメータ1","パラメータ2","パラメータ3"); //基本クラスのオブジェクトを宣言する。 MyClass2 mc2; //派生クラスのオブジェクトを基本クラスに代入する。 mc2 = mc3; 上記ソースの流れをすることのメリットがわからないのです。 派生クラスを、基本クラスに代入することでどのようなメリットが生まれるのでしょうか…。 (ダウンキャストも今いちするメリットが見えないのですが・・・。) ご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

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->書く(); } なんてな。 書けるものでありさえすれば、それが何かを知らぬまま 書く() ことができます。

ShiftTail
質問者

お礼

>書けるものでありさえすれば、それが何かを知らぬまま 書く() ことができます。 継承して仮想関数で書くまでは、わかったのですが 「いろいろ」の部分で分からなくなってしまいました。 少し考えてみることにします。 ありがとうございました。

その他の回答 (2)

回答No.3

> 書かれているソースはアップキャストでなく、コピーコンストラクタのような。 ...ホントだ。 てかコピー・オペレータですが(コピー・コンストラクタではなく)。 # コピー・コンストラクタなら MyClass2 mc2 = mc3;

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

書かれているソースはアップキャストでなく、コピーコンストラクタのような。

ShiftTail
質問者

お礼

確かに見直すとコピーコンストラクタを書いてる気がします。 あれから考えてみて、アップキャストするとレイトバインディングとかできるかなと思ってきました。 もう少し考えてみることにします。 ありがとうございました。

関連するQ&A