티스토리 뷰

Programing/C++

C++ 연산자 오버로딩

live2skull 2016. 8. 8. 12:51

연산자 오버로딩

#include "stdafx.h"

class Box
{
private:
	int var01, var02;
public:
	Box(int arg0, int arg1) : var01(arg0), var02(arg1) {}
	void Show() { printf("%d %d\n", var01, var02); }
	Box operator+(Box &old)
	{
		// box2 - old
		// myBox02 : addr 
		// Automatically used by ptr! (&)
		printf("start op\n");
		return Box(var01 + old.var01, var02 + old.var02);
	}
};

int main()
{
	Box myBox01(10, 20);
	Box myBox02(1, 2);
	Box testBox = myBox01 + myBox02;
	testBox.Show();
}

main 함수의 셋째 줄을 보면, Box타입의 객체들끼리 "+" 연산을 하고 있는 것을 볼 수 있다.

Box testBox = myBox01 + myBox02; 

와 같이 C++에서 기본적으로 지원도는 연산 외에, 자신이 원하는 형식끼리의 연산을 선언하고자 할 때, 연산자 오버로딩을 이용할 수 있다.


본 연산에서, 우변의 첫번째 "myBox01" 의 타입이 "Box"이므로, 컴파일러는 클래스 Box 에 해당 "+" operator 가 있는지 찾는다.

그 다음, 리턴 타입(Box)와 인자값이 맞는지 확인하고, 해당 연산자 (opeator)함수를 실행한다.


! operator 안에서 old를 &로 받은 이유(?) // "&" 연산자를 빼도 됨. 애초에 포인터가 아닌 객체 형태로 받아옴.

printf("%x\n", old); 로 실행하게 되면 객체의 메모리 주소가 아닌 맨 처음 데이터가 출력됨.


! 전역함수 사용 정리 : 나중에 다시 작성.



참고 : 

http://imagej.tistory.com/39

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함