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

public

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