publicアクセス指定子は、クラス外部からのメンバへのアクセスを許可するもの・・・。
base.hで、
このように定義すれば、public_variable_もpublic_function()もクラス外部から利用できる・・・。
一方で、privateアクセス指定子は、定義されたクラスのメンバ関数などからしか利用できない・・・。
private_variable_とprivate_function()は、クラス外部には非公開・・・。
そして、もう一つ・・・。
protectedアクセス指定子は、派生クラスからはアクセスできるというもの・・・。
派生クラスを作れば、そのクラス内からはこのメンバにアクセスできる・・・。
さて、アクセス指定子は、クラス継承の時に付けることもある・・・。
public.hで、
class_baseを継承してclass_publicを定義するとき、publicとつけている・・・。
public継承だ・・・。
class_publicで、print_baseでclass_baseに定義されている各メンバを呼び出すようにしておく・・・。
class_baseオブジェクトを作成し、呼び出せるメンバはpublicで定義されたものだけ・・・。
それ以外を呼ぶと、
$ g++ -o main main.cpp base.cpp In file included from main.cpp:5:0: base.h: 関数 ‘int main()’ 内: base.h:11:9: エラー: ‘int class_base::private_variable_’ は非公開です int private_variable_; // private変数 ^ main.cpp:14:5: エラー: within this context b.private_variable_ = 1; // privateなのでアクセス不可. ^ In file included from main.cpp:5:0: base.h:14:10: エラー: ‘void class_base::private_function()’ は非公開です void private_function(); // private関数 ^ main.cpp:15:22: エラー: within this context b.private_function(); // privateなのでアクセス不可. ^ In file included from main.cpp:5:0: base.h:20:9: エラー: ‘int class_base::protected_variable_’ は保護されています int protected_variable_; // protected変数 ^ main.cpp:16:5: エラー: within this context b.protected_variable_ = 1; // protectedなのでアクセス不可. ^ In file included from main.cpp:5:0: base.h:23:10: エラー: ‘void class_base::protected_function()’ は保護されています void protected_function(); // protected関数 ^ main.cpp:17:24: エラー: within this context b.protected_function(); // protectedなのでアクセス不可. ^ $
となってしまう・・・。
class_publicオブジェクトもpublicなメンバはmainから呼び出せる・・・。
しかしそれ以外は、上記と同様のエラーが出る・・・。
さて、print_baseはどうか・・・。
$ vi public.cpp $ vi main.cpp $ g++ -o main main.cpp base.cpp public.cpp $ ls base.cpp base.h main main.cpp public.cpp public.h $ ./main b.public_variable_ = 1 public_function p.public_variable_ = 1 public_function protected_variable_ = 1 protected_function public_variable_ = 1 public_function $
publicに加えて、protectedにもアクセスできる・・・。
protectedは派生クラスからもアクセスできるから・・・。
privateは、基底クラスからでないとアクセスできないのでダメ・・・。(上でコメントアウトされてるからバレてるか・・・。)
public継承はこんな感じ・・・。
Sample/cpp/public/public/src/public at master · bg1bgst333/Sample · GitHub