プロが教える店舗&オフィスのセキュリティ対策術

アップキャストは、なぜ使用するのでしょうか。

<ソース;アップキャストのソース>
//派生クラスのオブジェクトw宣言する。
MyClass3 mc3("パラメータ1","パラメータ2","パラメータ3");

//基本クラスのオブジェクトを宣言する。
MyClass2 mc2;

//派生クラスのオブジェクトを基本クラスに代入する。
mc2 = mc3;


上記ソースの流れをすることのメリットがわからないのです。
派生クラスを、基本クラスに代入することでどのようなメリットが生まれるのでしょうか…。
(ダウンキャストも今いちするメリットが見えないのですが・・・。)

ご教授お願いします。

A 回答 (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->書く();
}

なんてな。
書けるものでありさえすれば、それが何かを知らぬまま 書く() ことができます。
    • good
    • 0
この回答へのお礼

>書けるものでありさえすれば、それが何かを知らぬまま 書く() ことができます。

継承して仮想関数で書くまでは、わかったのですが

「いろいろ」の部分で分からなくなってしまいました。
少し考えてみることにします。

ありがとうございました。

お礼日時:2012/08/26 23:11

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



...ホントだ。 てかコピー・オペレータですが(コピー・コンストラクタではなく)。
# コピー・コンストラクタなら MyClass2 mc2 = mc3;
    • good
    • 1

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

    • good
    • 0
この回答へのお礼

確かに見直すとコピーコンストラクタを書いてる気がします。

あれから考えてみて、アップキャストするとレイトバインディングとかできるかなと思ってきました。

もう少し考えてみることにします。

ありがとうございました。

お礼日時:2012/08/26 23:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!