반응형
[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 << "분";
}
반응형
'Programming > C, C++' 카테고리의 다른 글
카멜 표기법, 스네이크 표기법 (0) | 2022.12.06 |
---|---|
C++ 가상 함수(Virtual Function), 순수 가상 함수(Pure Virtual Function) (0) | 2022.11.18 |
C++ 클래스 private접근, Friend 지정 사용 (0) | 2022.11.17 |
C++ 오류 해결 Error:C4996, strcpy, strncpy 사용시 에러 발생 (0) | 2022.11.16 |
LV3 C++ 접근지정자 (0) | 2022.09.21 |