基底クラスの関数を派生クラスでprivateに変更する

ロベールのC++入門講座 13-11

前回のusingの応用です。

#include <iostream>

class CBase {
public:
    void func(char*);
    void func(int);
};

class CSub : public CBase {
private:
    // 基底クラスのfunc関数をprivateにする
    using CBase::func;
};

void CBase::func (char *str) {
    std::cout << str << std::endl;
}

void CBase::func (int num) {
    std::cout << num << std::endl;
}

int main () {
    CBase obj1;
    obj1.func(100); // publicなのでアクセスできる
    
    CSub obj2;
    obj2.func(100); // privateなのでコンパイルエラーになる
    return 0;
}

上記のようにCBaseクラスではfunc関数はpublicになっているが、CSubクラスではprivateになる。

もちろんusingを使わずにfunc関数を自分でオーバーライドしていけば同じようにprivateにできるけど、同じ処理をコピペして管理するのは現実的ではないですよね。

usingって色々なことができて凄く便利ですね。