본문 바로가기
Programming/C, C++

C++ 연산자 오버로딩

by Dev_카페인 2022. 11. 17.
반응형

[C++] 연산자 오버로딩

 

// 연산자 오버로딩
// 오버로딩의 개념을 '+', '-', '*', '/' 등 표준 연산자에 확장하여 연산자들이 다중적인 의미를 가질 수 있게 함
// 연산자도 피연산자의 타입에 따라 중복 정의할 수 있다. 
// 피연산자의 타입이 달라도 똑같은 연산자로 일관되게 할 수 있는 것은 다형성의 예이다.
// 연산자를 오버로딩하기 위해서는 operator + () 와 같은 특별한 함수가 필요하다.
// 함수 호출과 연산자 표기 방법으로 사용 가능하다.
// 연산자 표기 방법으로 사용할 때 연산자의 왼쪽 객체가 호출 객체이다.
// 
// 오버로딩의 규칙
// 1. 원래 연산자에 적용되던 문법을 위반해서 오버로딩된 연산자를 사용할 수 없다.
// 2. 연산자의 우선순위를 변경할 수 없다.
// 3. 연산자 기호를 새로 만들 수 없다.
// 4. 오버로딩할 수 없는 연산자들이 있다. ('.', '.*', '::', '?:' 등)
// 5. 오버로딩했을 때 멤버 함수만 사용할 수 있는 것이 있다. ('=', '()', '[ ]', '->')



#include <iostream>
using namespace std;

class Timer
{
private :
	int hour;
	int minute;
public :
	Timer();
	Timer(int h, int m);
	Timer operator+(const Timer& t) const;
	void GetTotalTime() const;
};

int main() 
{
	Timer studyingToday;
	Timer studyingEng(1, 50);
	Timer studyingMath(2, 30);

	//studyingToday = studyingEng.operator+(studyingMath);	// 아래와 동일한 사용
	studyingToday = studyingEng + studyingMath;
	cout << "Today's Timer : ";
	studyingToday.GetTotalTime();

	return 0;
}

Timer::Timer()
{
	hour = minute = 0; 
}

Timer::Timer(int h, int m)
{
	hour = h;
	minute = m;
}

Timer Timer::operator+(const Timer& t) const
{
	Timer tot;
	tot.minute = minute + t.minute;
	tot.hour = hour + t.hour + tot.minute / 60;
	tot.minute %= 60;
	return tot;
}

void Timer::GetTotalTime() const
{
	cout << hour << "시간, " << minute << "분";
}
반응형