본문 바로가기

System Programmings/C++

[C++] 클래스 객체간의 연산을 도와주는 operator

반응형
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