연산자 오버로딩
이전에 알아본 함수의 오버로딩이란 것의 의미는 "여러 개의 함수를 같은 이름으로 연결하는 것"이었다. 연산자 오버로딩 또한 이와 유사하다. 이번 글에서는 직접 작성한 Class객체에 기본연산자인 + 를 오버로딩하는 코드를 작성해 볼 것이다.
① [time.h]에 Time 클래스 선언 및 함수 sum 원형 제공
아래와 같이 Time 클래스를 선언한 time.h 헤더파일의 퍼블릭 멤버에, Time 클래스끼리의 합산값을 출력해주는 함수 sum의 코드를 작성해 볼 것이다.
#include <iostream>
#ifndef TIMEH
#define TIMEH
class Time
{
private:
int hours;
int mins;
public:
Time();
Time(int, int);
void addHours(int);
void addMins(int);
Time sum(Time&); //Time 클래스를 return하는 함수 sum의 원형 제공
void show();
~Time();
};
#endif
② [func.cpp]에 Time 클래스 관련 함수 및 sum 정의
#include "time.h"
using namespace std;
Time::Time()//default 클래스
{
hours = mins = 0;
}
Time::Time(int h, int m) {//클래스 생성자
hours = h;
mins = m;
}
void Time::addHours(int h) {//hours 증가함수
hours += h;
};
void Time::addMins(int m) {//mins 증가함수
mins += m;
hours += mins / 60; //mins 합산 값이 60을 넘을 경우, hours 증가
mins %= 60; //mins는 60을 나눈 나머지
};
Time Time::sum(Time& t) {//Time클래스끼리의 합산값을 출력하는 함수 sum
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() {//Time 클래스 멤버 출력 함수 show
cout << "시간 : " << hours << endl;
cout << "분 : " << mins << endl;
};
Time::~Time()//클래스 파괴자
{
}
③ main 코드 작성
함수 sum을 활용하여, Time 클래스 day1과 day2을 합산한 Time 클래스인 total의 값을 출력하면 아래와 같다.
#include <iostream>
#include "Time.h"
using namespace std;
int main()
{
Time day1(1, 40);
Time day2(2, 30);
day1.show();
day2.show();
/*
시간: 1
분: 40
시간: 2
분: 30
*/
Time total;
total = day1.sum(day2);
total.show();
/*
시간: 4
분: 10
*/
return 0;
}
④ 헤더파일 및 func.cpp 파일에서 함수 sum을 operator+로 바꾸기
//헤더파일
Time operator+(Time&); //sum -> operator+
//func.cpp
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;
};
⑤ 함수 sum을 operator+로 바꾸게 되면, 이제 main 코드에서 time 클래스끼리 +로 직접 연산할 수 있다.
int main()
{
Time day1(1, 40);
Time day2(2, 30);
Time total;
total = day1 + day2;
// + == operator+ (+연산자는 operator+와 같다)
total.show();
/*
시간: 4
분: 10
*/
return 0;
}
※ 해당 게시글은 개인 학습의 목적으로, 아래 강의를 수강한 후 정리한 학습노트입니다.
'C++ 프로그래밍 > 기초 문법' 카테고리의 다른 글
[C++ 기초 문법] operator<< 오버로딩 (0) | 2024.02.15 |
---|---|
[C++ 기초 문법] friend (0) | 2024.02.14 |
[C++ 기초 문법] 클래스 Array와 *this (0) | 2024.02.12 |
[C++ 기초 문법] 클래스 생성자와 파괴자 (0) | 2024.02.12 |
[C++ 기초 문법] 추상화와 클래스 (0) | 2024.02.11 |