6章 アクセス指定子

http://www.geocities.jp/ky_webid/cpp/language/006.html

publicやprivateおよびprotectedのことをアクセス指定子というらしいです。

publicはメンバ変数やメンバ関数がどこからでもアクセスできるという指定子。

privateは宣言したそのクラスの関数内でのみアクセスできるという指定子。

protectedに関してはまだ説明はないみたいです。またどこかの章で出てくるんだと思います。

カプセル化

メンバ変数をprivateにすることによってその変数の値を外から変更できなくして、そのクラス内でのみ制御可能にすることをカプセル化というようです。

確かにこれは凄く便利だと思います。Cの勉強してるときも、結局プログラマがこの変数はこの関数経由でしか値を書き換えてはならないみたいなオレオレルールで制御するしかなかったのですが、それをコンパイラが保障してくれるというのは凄く助かります。なんせ人間はミスしますからね。

デフォルトのアクセス指定子

publicとかprivateを明示的に指定しなかった場合は全てprivate扱いになるようです。

class CSample
{
    void Set(int num);  // private
    int Get();          // private

    int m_num;          // private
};

また指定子は上から順に判定されるようなので途中から変更することもできます。

class CSample
{
    int m_num;          // private

public:
    void Set(int num);  // public
    int Get();          // public

};

そして出ました構造体の話。前回少しだけ触れてましたが、C++では構造体もクラスも殆ど同じなんだそうです。

違いとして、構造体の場合はデフォルトのアクセス指定子がpublicになっているという点です。

つまり

class Sample {
public:
    char *str;
    int num;
};

struct Sample {
    char *str;
    int num;
};

は、機能的にまったく同じなんだそうです。なんだか面白いですね。