C++ クラスの簡単な書き方 ヘッダファイル

通常、クラスのメンバ変数やメンバ関数の定義と実装は、
ヘッダファイル(***.h)ソースファイル(***.cpp)に分割します。

極端に小さい機能しか持たないクラスの場合は、
ヘッダファイルのみに定義、実装を記述する事もできます。

ここでは、分割した場合と、
分割せず、ヘッダファイルにのみ記述した例を示します。

ヘッダファイルとソースファイルに分割した記述例

ファイル名:hito.h

class hito {
public:
int age;
int sinchou;
int taiju;

void show_age();
void show_sinchou();
void show_taiju();

};

ファイル名:hito.cpp

#include <iostream>
#include "hito.h"

using namespace std;

void hito::show_age() {
      cout << "年齢は" << age << "です。" << '\n';
}

void hito::show_sinchou() {
      cout << "身長は" << sinchou << "です。" << '\n';
}

void hito::show_taiju() {
      cout << "体重は" << taiju << "です。" << '\n';
}

この例では、クラスhitoの定義と実装を
ヘッダファイル(hito.h)とソースファイル(hito.cpp)に分割した例です。

ヘッダファイル(hito.h)には、
メンバ変数の定義、メンバ関数のプロトタイプ宣言を記述しています。

一方、ソースファイル(hito.cpp)では、
クラスhitoのメンバ関数の実装を記述しています。

まず始めに、
クラスhitoの定義を記述したヘッダファイル(hito.h)をインクルードします。

メンバ関数の実装は、メンバ関数名の前にクラス名
::(スコープ解決演算子)をつけて
この関数がクラスhitoのメンバ関数であることを明記しなければなりません。

あとは、通常通りの記述が行えます。

ヘッダファイルのみにクラスを定義・実装した記述例

ファイル名:hito.h

#include <iostream>

using namespace std;

class hito {
public:
int age;
int sinchou;
int taiju;

void show_age() {
      cout << "年齢は" << age << "です。" << '\n';
}

void show_sinchou() {
      cout << "身長は" << sinchou << "です。" << '\n';
}

void show_taiju() {
      cout << "体重は" << taiju << "です。" << '\n';
}

};

この例は、クラスhitoの定義と実装を
ヘッダファイル(hito.h)だけに記述した例です。

ヘッダファイル内に、
メンバ変数の定義、メンバ関数の定義、実装を記述しています。

分割した場合と比べて、
メンバ関数のプロトタイプ宣言をする必要はありません。

ですが、関数の実装が大きければ、
ヘッダファイル内の記述が煩雑になってしまうので、オススメできません。

また、静的メンバ変数静的メンバ関数を扱う事はできない記述方法です。

静的メンバ変数についてはこちらのページ、
静的メンバ関数についてはこちらのページで解説しています。

スポンサーリンク

まとめ

まとめとして、ヘッダファイルには、クラスメンバの定義だけに留めておき、
ソースファイルに実装を記述するのが、あらゆる事例に対応できる書き方です。

また、実装するソースファイルは複数あっても問題ありません。

例えば、クラスhitoの場合、
メンバ関数show_ageの実装をソースファイル(hito1.cpp)に、
メンバ関数show_sinchouの実装をソースファイル(hito2.cpp)に、
メンバ関数show_taijuの実装をソースファイル(hito3.cpp)に
分割する事ができる。

と言う事です。

クラスが膨大になった場合、このように分割すると管理しやすくなるでしょう。


以上、クラスの簡単な記述方法でした。