Effective C++ Item 40
2009-08-25


C++ での関数の名前解決は、まず関数名のよって型の適合などを含めて一番適した関数が検索される。その後に、パブリック、プライベートなどのアクセス権限が調べられる。

多重継承では、同一名の関数が存在する為に、どの関数を呼ぶのかが不明瞭になる時がある。これはスコープを指定して関数を呼ぶことで回避できる。


class BorrowableItem{
    public:
        void checkOut(); // 図書館で借りられる。
};

class ElectronicGadget{
    public:
        bool checkOut(); // 自己検診。

};

class MP3Player: public BorrowableItem, public ElectronicGadget
{...};

MP3Player mp;
mp.checkOut(); // 不明瞭。
mp.BorrowableItem::checkOut(); // BorrowableItem の checkOut;

また、多重継承時に基底クラスが同じだと、同じ基底クラスを複数持つ事になる。 そのような場合は、仮想継承を用いることで、動的に基底クラスにアクセス出来るようになる。


class File{...};
class InputFile: virtual public File{...};
class OutputFile: virtual public File{...};
class IOFile: public InputFile, public OutputFile{...};

前回次回

[c++(マクロへ移行中)]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット