Effective C++ Item 332009年08月17日 22時27分12秒

  • 派生クラスで使われた名前は基底クラスの同じ名前を隠す。パブリック継承の時は注意が必要になる。
  • 隠された名前を有効にするには using を用いる。

名前解決には関数名だけで行なわれる。その為、異なった引数を取る同じ関数名が派生関数で定義されると、基底クラスの名前の同じ全ての関数は隠されてしまう。

以下の例では mf1(int)mf3(couble) が派生クラスに隠蔽されてしまい呼ぶことが出来ない。


class Base
{
    public:
        virtual void mf1() = 0;
        virtual void mf1(int);

        virtual void mf2();

        void mf3();
        void mf2(double);
};

class Derived: public Base
{
    public:
        virtual void mf1();
        void mf3();
        vid mf4();
};

そこで、以下のように using を用いて Derived クラスのスコープに呼び込むことが出来る。

class Derived: public Base
{
    public:
        using Base::mf1;
        using Base::mf3;

        virtual void mf1();
        void mf3();
        vid mf4();
};

前回次回