사자자리

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

C++/C++ 이론

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

renne 2022. 8. 24. 20:07

연산자 오버로딩

함수 오버로딩

 - 다른 매개변수의 데이터형을 가진, 같은 이름의 함수를 여러 개 정의할 수 있다.

 

연산자 오버로딩

 - 오버로딩의 개념을 연산자까지 확장하여, 연산자다중적인 의미를 부여한다.

 - C++은 피연산자의 개수 또는 데이터형을 판단하여 연산자가 어떤 연산을 수행할지 결정한다.

 - 예를 들어, '*'은 주소에 적용되면 그 주소에 저장되어 있는 값을 산출하고, 두 값 사이에 적용되면 두 값의 곱을 산출한다.

 

두 개의 시간을 더하는 기능을 구현해보자

//time.h
#include <iostream>
#ifndef TIMEH
#define TIMEH
class Time {
private:
	int hours, mins;

public:
	Time();
	Time(int, int);
	void addHours(int);
	void addMins(int);
	Time sum(Time&);
	void show();
	~Time();
};
#endif	// !TIMEH
//func.cpp
#include "time.h"

Time::Time() {
	hours = mins = 0;
}

Time::Time(int h, int m) {
	hours = h;
	mins = m;
}

void Time::addHours(int h) {
	hours += h;
};

void Time::addMins(int m) {
	mins += m;
	hours += mins / 60;
	mins %= 60;
};

Time Time::sum(Time& t) {	//sum 함수를 호출한 Time 객체와 매개변수인 Time 객체를 더해서 새로운 Time 객체를 만드는 함수
	Time sum;
	sum.mins = mins + t.mins;
	sum.hours = hours + t.hours;
	sum.hours += sum.mins / 60;
	sum.mins %= 60;
	return sum;
};

void Time::show() {
	std::cout << hours << "시간 " << mins << "분" << std::endl;
}

Time::~Time() {
}
//main.cpp
#include <iostream>
#include "time.h"
using namespace std;
int main() {
	Time day1(1, 40);
	Time day2(2, 30);

	day1.show();
	day2.show();

	Time total;
	total = day1.sum(day2);	//day1 객체와 day2 객체를 더해서 total 객체를 만든다.
	total.show();

	return 0;
}

 

sum 함수 → operator+

//time.h
#include <iostream>
#ifndef TIMEH
#define TIMEH
class Time {
private:
	int hours, mins;

public:
	Time();
	Time(int, int);
	void addHours(int);
	void addMins(int);
	Time operator+(Time&);	//sum에서 operator+로
	void show();
	~Time();
};
#endif	// !TIMEH
//func.cpp
#include "time.h"

Time Time::operator+(Time& t) {	//sum에서 operator+로
	Time sum;
	sum.mins = mins + t.mins;
	sum.hours = hours + t.hours;
	sum.hours += sum.mins / 60;
	sum.mins %= 60;
	return sum;
};
//main.cpp
#include <iostream>
#include "time.h"
using namespace std;
int main() {
	Time day1(1, 40);
	Time day2(2, 30);

	day1.show();
	day2.show();

	Time total1;
	total1 = day1 + day2;	//day1.sum(day2)에서 day1 + day2로
	cout << "방법1: ";
	total1.show();

	Time total2;
	total2 = day1.operator+(day2);	//day1.sum(day2)에서 day1.operator+(day2)로
	cout << "방법2: ";
	total2.show();
	return 0;
}

 

'C++ > C++ 이론' 카테고리의 다른 글

[C++] << 연산자 오버로딩  (0) 2022.08.24
[C++] 프렌드(friend)  (0) 2022.08.24
[C++] this 포인터와 클래스 객체 배열  (0) 2022.08.17
[C++] 클래스 생성자와 소멸자  (0) 2022.08.17
[C++] 추상화와 클래스  (0) 2022.08.17
Comments