사자자리
[C++] 연산자 오버로딩 본문
연산자 오버로딩
함수 오버로딩
- 다른 매개변수의 데이터형을 가진, 같은 이름의 함수를 여러 개 정의할 수 있다.
연산자 오버로딩
- 오버로딩의 개념을 연산자까지 확장하여, 연산자에 다중적인 의미를 부여한다.
- 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