「クラスの利用」シリーズ
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; };