のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

C++の演算子オーバーロード

Sponsored Links

皆さんこんにちは
お元気ですか。私は元気です。
生活習慣が崩壊していることは多々多く、そろそろ戻したいと思うけど、更に加速する気がする

今日は演算子のオーバーロードについて
個人的にはあまり使ったことがないので、さくっと勉強してみました。

自分で新しいクラスを設定してそのクラスの中の要素を足すことを演算子一つで設定するようなことができます

メリットは直感的でわかりやすいということですね。

実際の例題は以下の通りです。

#include <iostream>
#include <vector>

using namespace std;

class UserVector {
private:
	vector<double> vect;
	int size;	
public:
	UserVector(){}
	void setVector(vector<double> &in_vect){
		this->vect = in_vect;
		this->size = vect.size();
	};

	vector<double> operator + (UserVector u_vect){
		vector<double> r_vector(u_vect.getSize());
		for(int i = 0; i < vect.size(); i++){
			r_vector[i] = u_vect.getVector()[i] + this->vect[i];
		}
		return r_vector;
	}

	void print(){
		for(int i = 0; i < vect.size(); i++){
			cout << vect[i] << endl;
		}
	}
	
	vector<double> getVector(){
		return this->vect;
	}

	int getSize(){
		return this->size;
	}
};

int main(void){
	UserVector u_vector1;
	UserVector u_vector2;

	vector<double> vect1(3);
	vect1[0] = 2.0; vect1[1] = 3.0; vect1[2] = 4.0;
	vector<double> vect2(3);
	vect2[0] = 5.0; vect2[1] = 6.0; vect2[2] = 5.0;
	
	u_vector1.setVector(vect1);
	u_vector2.setVector(vect2);

	u_vector1.print();
	u_vector2.print();

	UserVector u_vector3;
	vector<double> vect3 = u_vector1 + u_vector2;
	u_vector3.setVector(vect3);

	u_vector3.print();
}

vectorをくるんだユーザー定義のvectorを設定して

  1. 演算子を利用した時の計算を
vector<double> operator + (UserVector u_vect)

にて表現しています。()内は計算する対象の演算子を入れているだけです。もちろん他のClassを使うこともできます。