PersesTitan(페르) 기술블로그

[C++] 입출력 연산자 재정의 (오버라이딩)하기 본문

Language/C

[C++] 입출력 연산자 재정의 (오버라이딩)하기

PersesTitan(페르) 2024. 1. 24. 10:50

클래스 정의

출력은 ostream의 <<를 입력은 istream의 >>의 연산자를 재정의 해주었습니다.

입출력 함수를 재정의할 때는 앞에 friend를 붙여주는데 전역 함수로 선언되여 쉬운 입출력 접근을 가능하게 만들어줍니다.

class Time {
    int hour;
    int second;
public:
    Time() {}
    Time(int hour, int second): hour(hour), second(second) {}

    friend ostream &operator<<(ostream &out, const Time &time);
    friend istream &operator>>(istream &in, Time &time);
};

입출력 연산자 정의

출력은 데이터가 변경되지 않기 때문에 Time클래스에 const가 사용되어도 무방하지만 입력은 값의 변경이 일어나야하기 때문에 const사용시 문제가 발생할 수 있습니다.

ostream &operator<<(ostream &out, const Time &time) {
    out << time.hour << "시 " << time.second << "분";
    return out;
}

istream &operator>>(istream &in, Time &time) {
    cout << "시 분 입력: ";
    in >> time.hour >> time.second;
    return in;
}

전체 코드

#include <iostream>

using namespace std;

class Time {
    int hour;
    int second;
public:
    Time() {}
    Time(int hour, int second): hour(hour), second(second) {}

    friend ostream &operator<<(ostream &out, const Time &time);
    friend istream &operator>>(istream &in, Time &time);
};

ostream &operator<<(ostream &out, const Time &time) {
    out << time.hour << "시 " << time.second << "분";
    return out;
}

istream &operator>>(istream &in, Time &time) {
    cout << "시 분 입력: ";
    in >> time.hour >> time.second;
    return in;
}

int main() {
    Time time;
    cin >> time;    // 입력
    cout << time;   // 출력
    return 0;
}

 

입출력 예시

# 입력
10 32

# 출력
시 분 입력: 10 32
10시 32분

'Language > C' 카테고리의 다른 글

[C] 리스트 add, set, delete간단하게 구현해보기  (0) 2023.12.18
[C] 원형큐 구조 정리  (0) 2023.12.17
[C] 선형큐 구조 정리  (0) 2023.12.17
[C] 거듭제곱 함수 만들기  (0) 2023.10.23
[C] 팩토리얼 함수 만들기  (2) 2023.10.23