本を読みながらC++の勉強。10ページ。今回は演算子のオーバーロードについて。
演算子のオーバーロードは次のような形式で定義する。
型 クラス名::operator#(引数)
{
}
#の部分にオーバーロードしたい演算子が入る。たとえば+や=など。
実際に3次元ベクトルのクラスを作って+と=の演算子をオーバーロードしたサンプル。
#include <iostream> using namespace std; class Vector3 { private: int x,y,z; public: Vector3() { x = y = z = 0; } Vector3(int a, int b, int c) { x = a; y = b; z = c; } Vector3 operator+(Vector3 p); Vector3 operator=(Vector3 p); void show() { cout << x << ' ' << y << ' ' << z << '\n'; } }; Vector3 Vector3::operator+(Vector3 p) { Vector3 temp; temp.x = x + p.x; temp.y = y + p.y; temp.z = z + p.z; return temp; } Vector3 Vector3::operator=(Vector3 p) { x = p.x; y = p.y; z = p.z; return *this; } int main() { Vector3 v1(1,2,3), v2(4,5,6), v3; v3 = v1 + v2; v3.show(); v3 = v1; v3.show(); return 0; } 実行結果 5 7 9 1 2 3
普通の+演算子の動作と同じようにオブジェクトの値が変えないためtempを作ってそれに加算処理を行っている。=演算子の場合はオブジェクトの値を変えて、そのオブジェクト自身を返すようにしている。