열렬히.뛰기

연산자 오버로딩

Language > 프로그래밍 언어 > C++ > Cpp : 기초 > 연산자 오버로딩

연산자 자체를 일종의 함수로 생각해서 작성하면 된다.

이론보다는 실제로 쳐보는 것이 가장 빠르게 익숙해지는 길이다.

예시 1

cpp
// a + b를 오버로딩한다고 가정해보자.
// - a.plus(b)가 된다고 생각하면 됨.
// - 따라서 반환타입은 a의 타입에 맞춰서 가면 됨.

iClass operator+(const iClass &b) const
{
	Myclass result = this.value + b.value;
	return result;
}

예시 2

cpp
// a << b를 오버로딩한다고 보자.
// - << 는 출력에 주로 사용된다. (리눅스의 redirection)
// - a는 출력에 사용되는 객체. 따라서 타입은 std::ostream이 될 것.
//  - 반환값의 타입은 a에 맞춰준다.
// - b는 내용물에 관련된 객체. 따라서 타입은 Iclass가 될 것.
//  - 또한 그 내용이 변형되면 안 되므로 const 키워드를 붙인다.
// - 자원낭비를 줄이기 위해 레퍼런스로 소환한다.

std::ostream &operator<<(std::ostream &os, const Iclass &obj)
{
	os << "Data : " << obj.data;
	return os;	
}

결론

  1. 원래 연산자의 기능을 생각해봐야 한다.

  2. 왼쪽에서 오른쪽으로 (→) 진행된다고 생각한다.

    예시 : a << b → operator<<(std::ostream &a, const Iclass &b)

  3. 들어가는 인자들은 보통 객체이므로, 자원낭비를 줄이기 위해 레퍼런스로 소환한다.

  4. 들어가는 인자들이 변형되면 안되므로 const 키워드를 꼭 붙여준다.