概要
今回はコンストラクタについて紹介します。
ここで作成した2次元ベクトル型クラス「Vector2」を使用していきます。
前回の記事はこちら
kiironomidori.hatenablog.com
コンストラクタのメリット
簡単に言うとクラスの初期化時に呼び出すことができる関数がコンストラクタです。
例えば、前回作成した2次元ベクトル型クラスでは宣言と同時に座標を設定するとき、
Vector2 vec; vec.set(2, 3);
と2行に分けて記述しました。
しかし、コンストラクタを用いれば宣言と同時に任意の処理が行えるので1行で記述することができます。
とりあえず使ってみる
使用例
#include <iostream> //クラスの宣言 class Vector2 { public: double x, y; //コンストラクタ Vector2(const double& _x, const double& _y) { set(_x, _y); } //値設定のための関数 void set(const double& _x, const double& _y) { x = _x; y = _y; } }; int main() { //2次元ベクトル型変数の宣言 Vector2 vec(2, 3); //表示 std::cout << "(" << vec.x << ", " << vec.y << ")" << std::endl; }
実行結果
(2, 3)
さらに深めて使用する
説明
先ほどは引数を2つ持つコンストラクタを作成しましたが、実はコンストラクタは複数作成することができます。
特に引数を持たないコンストラクタはデフォルトコンストラクタと呼ばれます。
デフォルトコンストラクタは
Vector2 vec1;
とすることで呼び出せます。
使用例
#include <iostream> //クラスの宣言 class Vector2 { public: double x, y; //デフォルトコンストラクタ Vector2() { std::cout << "デフォルトコンストラクタ" << std::endl; x = 0; y = 0; } Vector2(const double& _x, const double& _y) { std::cout << "引数が2つのコンストラクタ" << std::endl; set(_x, _y); } //値設定のための関数 void set(const double& _x, const double& _y) { x = _x; y = _y; } }; int main() { //デフォルトコンストラクタを使用 Vector2 vec1; //表示 std::cout << "(" << vec1.x << ", " << vec1.y << ")" << std::endl; //引数が2つのコンストラクタを使用 Vector2 vec2(2, 3); //表示 std::cout << "(" << vec2.x << ", " << vec2.y << ")" << std::endl; }
実行結果
デフォルトコンストラクタ (0, 0) 引数が2つのコンストラクタ (2, 3)