멤버함수의 const 위치에 따른 차이점

#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
참조하는 매개변수의 값을 변형하지 않겠다는 의미.

  1. 뒤의 const
    기본적으로 매개함수는 암묵적으로 this를 참조한다.
void print()

void print(Person* this)

와 같다는 의미이다.

여기서 뒤에 const를 붙히면

void print(const Person* this)

와 같게 된다.
쉽게 말해서 이 함수를 통하여 멤버 변수의 값을 변형하지 않겠다는 의미.

좋은 웹페이지 즐겨찾기