본문 바로가기

C++ 기초 1

[C++] 6-3 관계 연산자의 오버로드

관계 연산자의 오버로드

   관계 연산자(>, <, >=, <=, ==, !=)와 논리 연산자(&&,||,!)는 연산 결과가 참이면 1이고 거짓이면 0으로 반환된다. 관계 연산자나 논리 연산자가 객체에 오버로드하려면 멤버 연산자 함수 operator#()을 이용해야 한다. 여기서 객체를 반환하면 안 되고 아래 예제처럼 0 또는 1의 값으로 반환해야 한다.

 

 
예제
#include <iostream>
using namespace std;
class score {
private:
	int kor;
	int eng;
public:
	score(int a, int b) {
		kor = a; eng = b;
	}
	int operator>=(score ob);
};

int score::operator>=(score ob)	//연산자 함수의 정의
{
	return kor >= ob.kor && eng >= ob.eng;	//0 또는 1을 반환
};


int main()
{
	score ob1(90, 70), ob2(60, 60), ob3(50, 20);
	if (ob1 >= ob2) cout << "ob1: Pass" << endl;	//operator>=() 호출
	else cout << "ob1: Failure" << endl;
	if (ob3 >= ob2) cout << "ob3: Pass" << endl;	//operator>=() 호출
	else cout << "ob3: Failure" << endl;
	return 0;
}
실행 결과
ob1: Pass
ob3: Failure
  • 관계 연산자 >=를 score형의 객체에 대해 오버로드하였다.
  • ob >= ob2;에서 관계 연산자 좌측에 위치한 객체 ob1에 의해 멤버 연산자 함수 operator>=()가 호출되고 ob2가 매개변수로 전달된다.
  • ob 1>- ob2는 ob1.operator>=(score ob2)의 형태로 실행되고, 0 또는 1의 값으로 반환된다.
참고

1. 장인성 외 5인, (초보자도 쉽게 따라 할 수 있는) C++프로그래밍, 광문각, 2017.02.13