ZerOx4Cの日記だったもの

インポートだけしました

クラス継承についてのメモ

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継承したクラスを継承すると、そのクラス内からは親クラスのメンバにアクセス出来ない。


そんな感じか。うげー分かりにく!