살군의 보조기억 장치

Another memory device…

operator overloading

leave a comment »

뭐부터 정리할까 하다가 괜찮은 사이트가 있어서 연산자operator 오버로딩overloading 개념부터 먼저 정리를 하기로 했다. 옛날 옛적에 공부를 할 때부터 잘 이해가 안되던 것이였는데 한동안 손을 놓고 있다보니 많이 까먹었다. 자! 정리를 해보자. 우선 제일먼저 봐야될 것은 연산자 우선순위. 대충은 알고 있지만 햇갈리니 붙여놓자. 딴데 찾을려면 귀찮다.

C++ Operator Precedence

C++ Operator Precedence

기본적으로 위에 있는 연산자 우선순위를 참고해서 보면 되겠고. 지금부터 이번 포스트의 핵심인 연산자 오버로딩에 대해 보자. 오버로딩 할 수 있는 연산자는 아래에서처럼 많다.

Common operators

Common operators

하나씩 살펴보자. 제일 먼저 볼 것은 표의 가장 왼쪽에 있는 할당assignment연산자이다. 할당 연산자는 아래 그림에서 보는 것 처럼 “=” 이 들어가는 연산자들이다. 연산자 오버로딩에서 매번 햇갈렸던 부분이 클래스 내부에서 정의할 때와 클래스 외부에서 정의할 때가 다른 것인데 이것에 대한 개념이 없어서 햇갈렸던 것이다.

Assignment operators

Assignment operators

위에서 보는 것 처럼 기본적인 할당 연산자인 “=” 의 경우 클래스 외부에서의 정의는 존재하지 않는다. 나머지는 클래스 내부에서도 정의할 수 있다. 실제 사용 예를 보자.

#include

class TS {
public:
	float b;
	TS() { b= 1.1; }
	~TS() {}

	TS& operator = (const TS& rhs) {
		this->b = rhs.b + 1;
		return *this;
	}
};

int main(int argc, char* argv[])
{
	TS first;
	first.b += 10;
	TS second;
	second = first;

	::std::cout << first.b << ::std::endl;
	::std::cout << second.b << ::std::endl;
	return 0;
}

이 결과 출력값은

11.1
12.1

이 된다.

한가지 의심스러운 부분은 클래스를 생성시에 할당 연산자를 사용할 경우, 결과가 이상하게 나온다는 것이다. 위의 코드에서 line:19 를 아래와 같이 변경하고 line:20 을 삭제하면,

	TS second = first;

operator= 에 의해 11.1 + 1 이되서 12.1 이 출력될 것이라 예상했는데, 실제 출력값은 11.1 이 된다. 이 부분은 좀 더 확인이 필요하겠다.

나머지 연산자에 대해서도 살펴보면,

Increment/decrement operators

Increment/decrement operators

Arithmetic operators

Arithmetic operators

Logical operators

Logical operators

Comparison operators

Comparison operators

Member access operators

Member access operators

Other operators

Other operators

이렇게 정리가 되었다.

참고
Advertisements

Written by gomiski

2014/02/13 at 1:18 am

Posted in C++, General, Lecture

Tagged with , ,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: