관계 연산자의 오버로드
관계 연산자(>, <, >=, <=, ==, !=)와 논리 연산자(&&,||,!)는 연산 결과가 참이면 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
'C++ 기초 1' 카테고리의 다른 글
[C++] 6-5 프렌드 연산자 함수 (1) | 2024.01.10 |
---|---|
[C++] 6-4 []연산자의 오버로드 (1) | 2024.01.09 |
[C++] 6-2 단항 연산자의 오버로드 (2) | 2024.01.05 |
[C++] 6-1 이항연산자의 오버로드 (1) | 2024.01.04 |
[C++] 5-5 템플릿 클래스(Template class) (0) | 2024.01.03 |