C++クラス
クラスについて
クラスとは
C++のクラスは、C言語の構造体を機能拡張したものであり、変数(データ)と関数(メソッド)を持っている構造体です。
C++におけるクラスは、以下の機能を提供します。
- オブジェクト指向プログラミングにおける「カプセル化」機能を提供します。
- 実現の詳細を隠蔽し、内部的な動作メカニズムを知らなくても利用できる(データの抽象化)ようにします。
クラスの定義
クラスの簡単な書式は以下の通りです。(クラスの終端には「;」コロンを記述する必要があります。)
class クラス名{
private:
// 非公開部分
public:
// 公開部分
};
クラスはアクセス制限を実現するために「アクセス識別子」を用います。
指定 | 説明 |
---|---|
public | これ以降に書かれたメンバは公開されます。すべての関数でクラスメンバを使用できます。 |
private | これ以降に書かれたメンバは非公開となります。クラスのメンバ関数とフレンド(クラス、関数)でクラスメンバを使用できます。 |
protected | クラスの継承を用いる場合に意味持つアクセス識別子です。この宣言がされたクラスメンバはprivate機能を持ち、派生クラスのメンバ関数からアクセスが可能になります。 |
メソッドの定義と呼び出し
クラス宣言の中でメソッドを定義
クラス宣言内でメソッドを定義することで、オブジェクト生成後に呼び出すことができます。
C++で「オブジェクトを生成する」とは、classで定義した型の変数を定義する(領域を確保する)ことです。
オブジェクト生成にはポインタを利用することもできます。(C++でのメモリ確保には「new」を用い、解放には「delete」を用います。)
クラス型 変数名; // オブジェクトを生成する方法。
クラス型 *変数名 = new クラス型 // ポインタに領域を確保する方法。
クラスメソッドの呼び出し
メソッドの呼び出しは「クラス名.メソッド」とするか「クラスへのポインタ->メソッド」とします。
なお、オブジェクト指向では、メソッド(メンバ関数)の呼び出しを「メッセージを送る」と表現します。
#include <iostream>
using namespace std;
class Cube{
private:
int height;
int width;
int depth;
public:
void set(int a, int b, int c){
height = a;
width = b;
depth = c;
}
int get_volume(void){
return(height * width * depth);
}
};
int main()
{
Cube *cube1 = new Cube;
cube1->set(3,4,5);
cout << cube1->get_volume() << endl;
delete cube1;
return(0);
}
スコープ決定演算子の利用
スコープ決定演算子を利用することで、メソッドの定義をクラス宣言の外に出すことができます。
その場合には、クラス宣言でメソッドのプロトタイプ宣言を行う必要があります。
#include <iostream>
using namespace std;
class Cube{
private:
int height;
int width;
int depth;
public:
void set(int a, int b, int c);
int get_volume(void);
};
void Cube::set(int a, int b, int c){
height = a;
width = b;
depth = c;
}
int Cube::get_volume(void){
return(height * width * depth);
}
int main()
{
Cube *cube1 = new Cube;
cube1->set(3,4,5);
cout << cube1->get_volume() << endl;
delete cube1;
return(0);
}
関連ページ
- C++のファイル作成と実行
- 関数
- 名前空間
- 参照型
- 動的メモリ割り当て
- キャスト
- 例外処理
- クラス
- コンストラクタとデストラクタ
- 継承
- ポリモーフィズム
- テンプレート
- STL
- 文字列操作
- 演算子のオーバーロード