クラスを定義する構文
クラスは構造体の親戚である為、クラスを定義する構文は、
構造体を定義する構文と似ている
- 構文
- class というキーワードに続けてクラス名を付ける
- クラス全体を { と } のブロックで囲む
- 末尾の } の後ろにセミコロン (;) を付ける
- ブロックの中にクラスのメンバを記述する
- クラスでは、変数と関数の両方をメンバにできる
- 構造体の定義(C言語)
-
1
2
3
4
5
|
-
|
|
!
| struct _car
{
int num;
double gas;
};
|
- クラスの定義(C++)
- struct の代わりに class というキーワードを使用する
- アクセス指定子 public:というキーワードも使用する
1
2
3
4
5
6
|
-
|
|
|
!
| class Car
{
public:
int num;
double gas;
};
|
- 変数だけを持つクラス、関すだけを持つクラス、両方を持つクラスを定義できる
1
2
3
4
5
6
7
8
|
-
|
|
|
|
|
!
| class Car
{
public:
int num;
double gas;
void setGas (void);
void showCar (void);
};
|
メンバ関数の実装
メンバ関数の処理内容を実装するコードは、
クラスを定義するブロックとは独立した別のブロックに記述する
- 実装方法
- setGas() の所有者は Car クラスである
- 所有者をコードで示す為に、関数名の前に「クラス名::」と指定する
- このコロン2つのことをスコープ解決演算子という
- 実装サンプル
1
2
3
4
5
|
-
|
!
| void
Car::setGas (void)
{
gas += 1.00;
}
|
- ポイント
- メンバ関数の中からは、同じクラスのメンバ変数とメンバ関数を所有者を指定せずに利用できる
- 一般的に、クラスの定義はヘッダーファイル(*.h)、
メンバ関数の実装はソースファイル(*.cpp)に記述する
インライン関数
処理内容が短いものなら、クラスを定義するブロックの中で
メンバ関数を実装することができる。この場合、自動的にインライン関数となる
- サンプル
1
2
3
4
5
6
7
8
9
10
|
-
|
|
|
|
-
|
!
!
| class Car
{
public:
int num;
double gas;
void setGas (void)
{
gas += 1.00;
}
};
|
- ポイント
- Car クラスを使う側のコードで、
setGas() を呼び出すと、その位置に setGas() 関数の処理内容が展開される
クラスとオブジェクトの違い
構造体と同様に、クラスは型であり、クラスを定義しただけでは実体がない。
クラスをデータ型とした変数を宣言してから使用する
- 使用方法
- ポイント
- クラスがメモリ上に実体を持ったものをオブジェクト、又はクラスのインスタンスという
- クラスをデータ型とした変数を宣言して使う言語仕様にしたのは、
必要な数だけオブジェクトを作れるようにする為です
参考