クラス宣言

  クラスclass )は,C++ の最も重要な概念です.基本的には構造体の拡張であり,キーワードの違いを除けば,その宣言方法も構造体と同じです.一般的な表現方法をすると,例えばクラス Example ( Example: クラス識別子,クラス名)を,

class Example {
		int x;                // プライベートメンバー変数
		 ・・・
	protected:
		int y;                // 派生クラスだけが使用可能なメンバー変数
		 ・・・
	public:
		int z;                // パブリックメンバー変数
		 ・・・
	private:
		double fun1(int);     // プライベートメンバー関数
		double fun2(int)     // プライベートメンバー関数
		{
			・・・
		}
		 ・・・
	protected:
		double fun3(int);     // 派生クラスだけが使用可能なメンバー関数
		 ・・・
	public:
		double fun4(int);     // パブリックメンバー関数
		 ・・・
	friend double fun5(int); // フレンド関数
	 ・・・
	friend class Example2;   // フレンドクラス
	 ・・・
};
		

のように宣言します.ただし,上の例における public,private 等に対応するすべてのメンバーmember )を所有する必要はありません.public 等を記述しないと,クラス宣言のメンバーがプライベートとみなされる点以外,記述する順番も一般的には決まっていません.なお,クラス識別子のあとに記述される項目も存在しますが,それらについては後ほど説明します.

  private の後に記述されたメンバーは,定義されたクラスのメンバー関数,フレンド関数,および,フレンドクラスだけから参照可能です.protected の後に記述されたメンバーは,定義されたクラスの派生クラス(後述)だけから参照可能です.また,public の後に記述されたメンバーは,どこからでも参照可能です.C/C++ の通常の関数や別のクラスに対して,メンバー関数と同様のアクセス権を与えようとしたものが,フレンド関数やフレンドクラスの宣言です.なお,メンバー関数の本体は,クラス定義の中に記述することも,クラス定義の本体では関数の宣言だけを行いクラス宣言の外側(別のファイルでも構わない)に記述することも可能です.

  上の定義からも明らかなように,構造体との大きな違いは,メンバーとして関数を持てる点です.さらに,構造体ではそのメンバーをどの関数からでもアクセスできましたが,クラスでは,メンバーを private,public,及び,protected で分類し,各メンバーをアクセスできる範囲を限定しています.C++ は,構造体を,パブリックメンバー変数だけを持つ特殊なクラスと見なしていますので,後に述べるコンストラクタ,派生クラス等,クラスに特有な機能を構造体に対してもそのまま適用できます.

  上に述べたクラスの宣言方法において,メンバー関数 func2 だけは,その処理内容もクラス内で記述していますが,他のメンバー関数 func1,func3,func4 に関しては,その宣言だけを行っていますので,その処理内容をクラス外のどこか(別のファイルでも可)で行ってやる必要があります.その際は,例えば func1 であれば,以下のようにして記述する必要があります.
double Example::func1 (int a)
{
	・・・
}		
  上のようにして宣言されたクラスのオブジェクトを生成(クラス Example のインスタンスを生成,Example 型の変数の定義)し,そのメンバー変数やメンバー関数を参照するには,構造体と同様,基本的に以下のようにして行います.
Example ex;   // Example 型オブジェクトの生成
EXample *p_ex = new Example;   // p_ex は Example 型オブジェクトへのポインタ
ex.x = 20;   // メンバー変数 x の参照
y    = p_ex->func(10);   // ポインターによるメンバー関数 func の参照