クラス内にメンバ変数、メンバ関数を定義する際には、
アクセス指定子と言うモノを考慮しなくてはなりません。
クラスのメンバを
クラスの外からアクセスできる部分とできない部分に区別する事ができます。
クラスの外からアクセスできれば、
外側から、メンバ変数に代入したり、メンバ変数の値を読み出したり、
メンバ関数を呼び出したり・・・
と言った事が可能です。
逆に、クラスの外からアクセスできない設定ならば、
外側から、メンバ変数に代入したり、メンバ変数の値を読み出したり、
メンバ関数を呼び出したり・・・
と言った事が不可能になります。
「クラスの外から」と言うのは、普通の関数内、
又は別のクラスのメンバ関数内からアクセスできるか。
と言う意味で、
「クラスの中から」と言うのは、
自クラスのメンバ関数内からアクセスできるか。
と言う意味です。
実際に使用するアクセス指定子は3つです。
アクセス指定子 | 説明 |
public | クラス外からアクセス可能 クラス内からアクセス可能 派生クラスからアクセス可能 |
private | クラス外からアクセス不能 クラス内からアクセス可能 派生クラスからアクセス不能 |
protected | クラス外からアクセス不能 クラス内からアクセス可能 派生クラスからアクセス可能 |
※アクセス指定子は、1つ1つのメンバ変数、関数に対して設定可能です。
※派生クラスやprotectedについては、クラスの継承とは?で説明しています。
アクセス指定子を使った例
#include <iostream>
using namespace std;
class hito {
int age; // アクセス指定子記述なしの場合は
// privateとみなされる
public:
int sinchou; // public指定のメンバ変数
private:
int taiju; // private指定のメンバ変数
void show_age() { // private指定の
cout << "年齢は" << age << "です。" << '\n'; // メンバ関数
}
public:
void show_sinchou() { // public指定の
cout << "身長は" << sinchou << "です。" << '\n'; // メンバ関数
}
private:
void show_taiju() { // private指定の
cout << "体重は" << taiju << "です。" << '\n'; // メンバ関数
}
};
アクセス指定子なしの場合は、privateとみなされますが、
明示的に書いた方が分かりやすいと思います。