メンバー関数のconst位置の違い

1315 ワード

#include <iostream>

using namespace std;

class Vector
{
public:
	float x;
	float y;
	float z;

	Vector operator-()
	{
		return Vector{ -x,-y,-z };
	}
	const Vector operator+(const Vector& v) const
	{
		return Vector{ x + v.x, y + v.y, z + v.z };
	}

	void print()
	{
		cout << "x : " << x << " y : " << y << " z : " << z << endl;
	}
};

int main()
{
	Vector v0{ 0, 1, 2 };
	Vector v1{ 1, 2, 3 };

	Vector v2 = v0 + v1;
	Vector v3 = -v1;

	v0.print();
	v1.print();
	v2.print();
	v3.print();
}
上記のコードでは、Vectorクラスのoperator+には次の形式があります.
const Vector operator+(const Vector& v) const
1.前のconst
戻り値を読み取り専用として使用することを示します.
すなわち,参照により値の変形を防止する.
2.パラメータのconst
参照パラメータを変更しない値を示します.
  • の後のconst
    デフォルトでは、各関数はthisをデフォルトで参照します.
  • void print()
    表示
    void print(Person* this)
    は同じです.
    ここにconstを付けて
    void print(const Person* this)
    に等しい
    簡単に言えば、この関数でメンバー変数の値を変更しないことを意味します.