반응형
C++에서 일반적으로 만들 수 있는 기본 타입의 변수들은 사칙 연산 및 비교 연산 등을 직관적으로 할 수 있다.
아래의 코드를 보다시피, 바로 더하기, 빼기, 크거나, 작거나 등의 비교가 쉽다.
int a = 10;
int b = 20;
int sum = a + b;
int minus = a - b;
if(a > b)
cout << "a가 크다" << endl;
하지만 만약 클래스를 객체화시킨 변수를 더하거나, 빼거나, 비교 등의 연산을 하고 싶다면 아래처럼 하면 될까?
예제를 위해 간단한 클래스를 만들도록 한다.
이 클래스는 아주 조그마한 마켓으로 프링글스, 포테토칩, 라면이라는 단 3가지 품목만 파는 구조로 잡았다.
class Market
{
public:
int Pringles;
int PotatoChip;
int Ramen;
};
이제 마켓을 A와 B라는 마켓으로 만들고 두 마켓을 비교하는 코드를 만들도록 한다.
int main()
{
Market A;
Market B;
A.PotatoChip = 1980;
A.Pringles = 2730;
A.Ramen = 1230;
B.PotatoChip = 1990;
B.Pringles = 2770;
A.Ramen = 1240;
if (A > B)
cout << "A마켓이 B마켓보다 물건값이 비싸다";
else if (A < B)
cout << "B마켓이 A마켓보다 물건값이 비싸다";
else
cout << "A마켓과 B마켓의 물건값이 같다";
return 0;
}
A마켓과 B마켓을 비교하는 코드를 만들었는데, 이 코드를 빌드하면 잘 동작할 것 같지만 사실 빌드 에러가 난다.
바로 A와 B의 객체를 비교할 수 있는 기준이 없기 때문이다.
이제, 클래스 객체끼리 비교를 할 수 있는 기준을 만들어주면 객체끼리 비교가 가능해진다.
그것이 바로 operator다.
operator는 아래처럼 operator라고 쓰고 오른쪽에 연산할 연산자를 적으면 된다.
그리고 매개 변수로 클래스를 주고 리턴할 타입을 적어주면 된다.
bool operator>(Market &obj);
bool operator<(Market &obj);
bool operator>=(Market &obj);
bool operator<=(Market &obj);
bool Market::operator>(Market &obj)
{
if (this->PotatoChip + this->Pringles + this->Ramen > obj.PotatoChip + obj.Pringles + obj.Pringles)
return true;
return false;
}
bool Market::operator<(Market &obj)
{
if (this->PotatoChip + this->Pringles + this->Ramen < obj.PotatoChip + obj.Pringles + obj.Pringles)
return true;
return false;
}
bool Market::operator>=(Market &obj)
{
if (this->PotatoChip + this->Pringles + this->Ramen >= obj.PotatoChip + obj.Pringles + obj.Pringles)
return true;
return false;
}
bool Market::operator<=(Market &obj)
{
if (this->PotatoChip + this->Pringles + this->Ramen <= obj.PotatoChip + obj.Pringles + obj.Pringles)
return true;
return false;
}
이제 다시 빌드를 하면 에러 없이 잘 동작하게 된다.
그렇다면 만약, B마켓의 가격을 A마켓으로 할당하는 연산자를 만든다면 어떻게 해야 할까?
아마, void operator=(Market &obj); 형태로 함수를 선언하고 내부에서는 this에 obj의 값을 주면 될 것이다.반응형
'System Programmings > C++' 카테고리의 다른 글
프로그램 속도 측정 (0) | 2017.07.10 |
---|---|
동적 할당 방법 (0) | 2015.10.29 |
[C++] MS에서 사용하는 헝가리안 표기법 (0) | 2014.10.16 |
[C++] 가상 함수 (0) | 2014.10.16 |
[C++] 이미지 바이너리 읽기 (4) | 2014.03.10 |