C++ 프로그래밍/기초 문법

[C++ 기초 문법] 연산자 오버로딩

SW Developer 2024. 2. 13. 01:20

연산자 오버로딩

이전에 알아본 함수의 오버로딩이란 것의 의미는 "여러 개의 함수를 같은 이름으로 연결하는 것"이었다. 연산자 오버로딩 또한 이와 유사하다. 이번 글에서는 직접 작성한 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;
};

 

함수 sumoperator+로 바꾸게 되면, 이제 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;
}

 

 

 

 

 

※ 해당 게시글은 개인 학습의 목적으로, 아래 강의를 수강한 후 정리한 학습노트입니다.

https://inf.run/pypW