본문 바로가기
c++ 기초

24) 연산자 오버로딩, friend

by BitsrimAcrux 2025. 1. 5.

Time.h

#ifndef TIME
#define TIME
#include <iostream>
using namespace std;

class Time {
private:
	int hour;
	int min;

public:
	Time();
	Time(int, int);
	void addHour(int);
	void addMin(int);
	Time operator+(Time&); // ver2 연산자 오버로딩 안 썼을 때 Time sum(Time&);
	Time operator*(int); // t * n
	friend Time operator*(int n, Time& t) { // friend, n * t
		return t * n; // n * t는 t * n으로 변환 후 Time operator*(int)을 사용
	};
	void show();
	~Time();
};
#endif


함수 c++ 파일

#include "Time.h"

Time::Time() {
	hour = min = 0;
}
Time::Time(int h, int m) {
	hour = h;
	min = m;
}
void Time::addHour(int h) {
	hour += h;
}
void Time::addMin(int m) {
	min += m;
	hour += min / 60;
	min %= 60;
}
Time Time::operator+(Time& t) { // ver2 Time Time::sum(Time& t)
	Time rst;
	int rstMin = (hour + t.hour) * 60 + min + t.min;
	rst.hour = rstMin / 60;
	rst.min = rstMin % 60;
	return rst;
}
Time Time::operator*(int n) {
	Time rst;
	int rstMin = hour * n * 60 + min * n;
	rst.hour = rstMin / 60;
	rst.min = rstMin % 60;
	return rst;
}
//Time operator*(int n, Time& t) { // friend
//	Time rst;
//	int rstMin = t.hour * n * 60 + t.min * n;
//	rst.hour = rstMin / 60;
//	rst.min = rstMin % 60;
//	return rst;
//}
void Time::show() {
	cout << hour << " : " << min << endl;
}
Time::~Time() {

}


메인 c++ 파일

#include "Time.h"

int main() {
	Time t1(1, 50);
	Time t2(2, 40);

	t1.show();
	t2.show();
	cout << endl;

	Time rst;
	rst = t1 + t2; // t1.operator+(t2); (-, *, /, % 도 똑같이 하면 사용 가능)
	// ver2 t1.sum(t2);
	cout << "<더한 시간>\n";
	rst.show();
	cout << endl;

	int a = 1 + 3;
	cout << "기본 덧셈 1 + 3 = " << a << endl <<endl;

	rst = t1 * 2; // t1.operator*(2);
	cout << "<t1 * 2 계산 후 시간>\n";
	rst.show();
	rst = 2 * t1; // rst = operator*(2, t1);, friend
	cout << "<2 * t1 계산 후 시간>\n";
	rst.show();

	a = 1 * 3;
	cout << "\n기본 곱셈 1 * 3 = " << a << endl;

	return 0;
}


<출력>

1 : 50
2 : 40

<더한 시간>
4 : 30

기본 덧셈 1 + 3 = 4

<t1 * 2 계산 후 시간>
3 : 40
<2 * t1 계산 후 시간>
3 : 40

기본 곱셈 1 * 3 = 3

728x90

'c++ 기초' 카테고리의 다른 글

26) 상속, 다형 상속  (0) 2025.01.06
25) 출력 연산자(<<) 오버로딩  (0) 2025.01.06
23) 클래스 배열  (0) 2025.01.05
22) this 포인터  (0) 2025.01.04
21) 생성자, 소멸자  (0) 2025.01.04