privateアクセス指定子は、そのクラスのメンバのみアクセスを許可するもの・・・。
そして、クラス継承時にprivateを付けたprivate継承をすると、publicメンバもprotectedメンバもその派生クラスのprivateメンバになる・・・。
(基底クラスのprivateメンバは派生クラスからアクセスができなかったが、private派生クラスのpublic/protectedメンバはそのクラスでprivateになるだけでそのクラスからはアクセスできる・・・。)
class_protectedからは、class_baseでpublic/protectedだったメンバはアクセス可・・・。(ここではprotected扱いになるので・・・。)
こうやってprivate継承したclass_private、
これも、class_baseでpublic/protectedだったメンバはアクセス可・・・。(ここではprivate扱いになるので・・・。)
もう一段階継承すると違いが出る・・・。
class_protectedをprotected継承して、class_protected_derivedとする・・・。
class_baseでpublic/protectedだったメンバは、class_protectedではprotected扱いとなっているので、class_protected_derivedからはアクセスできる・・・。
(さらに今回はprotected継承なので、これのさらに派生クラスからもアクセス可能・・・。)
class_privateをprotected継承して、class_private_derivedとする・・・。
class_baseでpublic/protectedだったメンバは、class_privateでprivate扱いとなっているので、class_private_derivedからはアクセスできない・・・。
main.cppは、
class_protected、class_private、class_protected_derived、class_private_derived、のオブジェクトをそれぞれ出力している・・・。
$ g++ -o main main.cpp base.cpp protected.cpp private.cpp protected_derived.cpp private_derived.cpp $ ./main protected_variable_ = 1 protected_function public_variable_ = 1 public_function protected_variable_ = 1 protected_function public_variable_ = 1 public_function protected_variable_ = 1 protected_function public_variable_ = 1 public_function print_protected print_private $
class_private_derived以外は、派生元のメンバにアクセスできている・・・。
Sample/cpp/private/private/src/private at master · bg1bgst333/Sample · GitHub