KMDのプログラミングメモノート

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

C++ クラスの利用⑤(std::coutでの表示設定)





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

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



導入

前回まではベクトルの座標を表示するために

std::cout << "(" << vec2.x << ", " << vec2.y << ")" << std::endl;

というように記述してきましたが、これは毎回記述するのは面倒です。
そこで、std::coutでの表示の方法をクラス内で設定する方法を紹介します。




クラス内の設定

ヘッダーファイル「vector2.h」のVector2クラス内に以下を追加します。

friend std::ostream& operator << (std::ostream& os, const Vector2& v);


そうしたら「vector2.cpp」に以下のプログラムを追加します。
詳しい説明は割愛しますが、

os<<X

とするとstd::coutしたときにXが表示されます。


std::ostream& operator << (std::ostream& os, const Vector2& a) {
    os << "(" << a.x << ", " << a.y << ")";
    return os;
};


確認のために次のプログラムを実行すると

(2, 3)

と表示されます。


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

int main() {
    Vector2 vec2(2, 3);
    std::cout << vec2 << std::endl;
}




現在のvector2.hとvector.cppの中身

#pragma once
#include <iostream>

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

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

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

    //std::coutでの表示
    friend std::ostream& operator << (std::ostream& os, const Vector2& v);
};




#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;
}

//std::coutでの表示
std::ostream& operator << (std::ostream& os, const Vector2& a) {
    os << "(" << a.x << ", " << a.y << ")";
    return os;
};