14章 protected

http://www.geocities.jp/ky_webid/cpp/language/014.html

第6章のときに放置されていたprotectedというアクセス指定子の話です。

話は単純です。

そのクラス単体で見れば単なるprivateと同じ振舞いになります。

ではprivateと何が違うのかというと、そのクラスを継承したときにサブクラス側からでもアクセスできるという部分です。

#include <iostream>

class CSuper {
protected:
    void protected_foo();
};

void CSuper::protected_foo() {
}

class CSub : public CSuper {
public:
    void public_foo();
};

void CSub::public_foo() {
    // 呼び出せる。もしprivateだったら呼び出せない
    protected_foo();
}

int main() {
    CSub obj;
    // 呼び出せない。クラス外からのアクセスはprivateと同じ振舞いになる
    // obj.protected_foo();
    return 0;
}

といった感じです。外からアクセスされたくないのでprivateにしておきたいが、のちに継承されたときにそのサブクラスではアクセスを許可したいというときに使えます。

個人的には基本protectedにしておくっていうのも有りかなとは思います。どうなんでしょうね、そのあたり。