티스토리 뷰
연산자 오버로딩
#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); 로 실행하게 되면 객체의 메모리 주소가 아닌 맨 처음 데이터가 출력됨.
! 전역함수 사용 정리 : 나중에 다시 작성.
참고 :
'Programing > C++' 카테고리의 다른 글
C++ bit OR 연산을 이용한 플래그 옵션 저장 (0) | 2016.08.09 |
---|---|
C++ new, delete / 스택과 힙 (0) | 2016.08.08 |
C++ 가상 메소드, 순수 가상 메소드 (추상 클래스) (0) | 2016.08.07 |
C++ 클래스와 구조체의 차이 (0) | 2016.08.06 |
C++ 클래스 _ 상속, 오버라이딩 (0) | 2016.08.05 |
댓글