ミドリ黄のプログラミングメモノート

主にUnity(C#)を中心としたプログラムの備忘録

C++ クラスの利用④(メンバ関数のクラス外記述)





「クラスの利用」シリーズ

1. 宣言、メンバ変数、メンバ関数
2. コンストラクタ
3. ヘッダーファイルの作成
4. メンバ関数のクラス外記述(本記事)
5. std::coutでの表示




メリット

前回まではクラスのメンバ関数の定義をクラス内でしていました。
しかし、メンバ関数の定義はクラス外で行うことができ、これにより

  • クラス内が関数名のみとなるのでどのような関数があるのかが見やすくなる
  • メンバ関数の定義をヘッダーファイルとは別のcppファイルに記述できる

等のメリットがあります。




メンバ関数のクラス外記述の方法

メンバ関数をクラス外記述する場合もクラス内でその関数の名前と返り値、引数のみを宣言する必要があります
そして、クラス外でメンバ関数を定義するときは

返り値 クラス名::関数名(引数){
//中身
}

とします。

これらをまとめると前回作成した「vector2.h」は次のように書き換えることができます。

#pragma once

//クラスの宣言
class Vector2 {
public:
    double x, y;

    //コンストラクタ
    Vector2();
    Vector2(const double& _x, const double& _y);

    //値設定のための関数
    void set(const double& _x, const double& _y);
};

//コンストラクタ
Vector2::Vector2() {
    x = 0;
    y = 0;
}

Vector2::Vector2(const double& _x, const double& _y) {
    set(_x, _y);
}

//値設定のための関数
void Vector2::set(const double& _x, const double& _y) {
    x = _x;
    y = _y;
}





クラス外定義を別ファイルにまとめる。

先ほどのヘッダーファイルのクラス外の部分は別ファイルにまとめることができます。
「vector2.cpp」を作成(ファイル形式に注意)して以下の様に記述します。

#include "vector2.h"

//コンストラクタ
Vector2::Vector2() {
    x = 0;
    y = 0;
}

Vector2::Vector2(const double& _x, const double& _y) {
    set(_x, _y);
}

//値設定のための関数
void Vector2::set(const double& _x, const double& _y) {
    x = _x;
    y = _y;
}


そうするとヘッダーファイルの中身が次の様にクラスの定義だけでよくなります。

#pragma once

//クラスの宣言
class Vector2 {
public:
    double x, y;

    //コンストラクタ
    Vector2();
    Vector2(const double& _x, const double& _y);

    //値設定のための関数
    void set(const double& _x, const double& _y);
};