クラス継承についてのメモ
C#では何も考えずにしていた継承だけど、C++ではprivate継承とかよく分からんものがあるじゃないか。ということでいろいろ実験してみた。実験は学習の基本だね、うん。
これが基本クラス。
class Base { public: void pubf() { printf("base public\n"); } protected: void prof() { printf("base protected\n"); } private: void prif() { printf("base private\n"); } };
こいつを色々継承してみて挙動を見る。というか基本IDEのエラーを見る。
分かったこと:
- 派生クラス内での挙動はBase内のアクセス権に従う
- 外部からのアクセスに対しては、自身の継承時のアクセス権に地ならしされる(protected継承ならprivateはそのまま、publicはprotectedになる)
- その派生クラスを継承すると、内部からのアクセスは派生先のクラスのアクセス権に従う
なんか分かりにくいな。
- public継承はC#における継承と同じ。
- protected継承すると外からのアクセスはprotected以下。
- private継承すると外からのアクセスは全てprivateに。(つまりアクセス不能
- private継承したクラスを継承すると、そのクラス内からは親クラスのメンバにアクセス出来ない。
そんな感じか。うげー分かりにく!