読者です 読者をやめる 読者になる 読者になる

private

C++ Sample

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