inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[하루 10분|C++] 누구나 쉽게 배우는 C++ 프로그래밍 입문

상속 기본

클래스 상속과 << 연산자 오버로딩

681

luke1260

작성한 질문수 2

0

클래스를 상속할때Time객체의 show함수를 << 연산자 오버로딩으로 대체한것처럼 Time 클래스를 상속한 NewTime 객체도 << 연산자를 오버로딩 할 수 없나요? hours와 mins가 Time의 private이라서 접근할 수 없다고 나오는데 다른 방법이 없는지 궁금합니다.

c++

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.

Time 클래스를 상속받은 NewTime 객체도 << 연산자를 오버로딩할 수 있습니다. 하지만, hours와 mins가 Time의 private으로 선언되어 있기 때문에 상속받은 클래스에서 직접적으로 접근할 수 없습니다. 이를 해결하기 위해서는 Time 클래스 내부에 hours와 mins에 접근할 수 있는 getter 함수를 선언하고, 이를 이용하여 상속받은 클래스에서 << 연산자 오버로딩을 구현하면 됩니다.

아래는 Time 클래스 내부에 getter 함수를 추가하고, 이를 이용하여 NewTime 클래스에서 << 연산자 오버로딩을 구현한 예시입니다.

#include <iostream>
using namespace std;

class Time {
private:
    int hours;
    int mins;
public:
    Time(int h = 0, int m = 0): hours(h), mins(m) {}
    int get_hours() const { return hours; }
    int get_mins() const { return mins; }
};

ostream& operator<< (ostream& os, const Time& t) {
    os << t.get_hours() << "시 " << t.get_mins() << "분";
    return os;
}

class NewTime : public Time {};

int main() {
    NewTime nt(3, 30);
    cout << nt << "입니다." << endl;
    return 0;
}

위와 같이 getter 함수를 이용하여 private 멤버에 접근할 수 있으므로, NewTime 클래스에서 << 연산자 오버로딩을 구현할 수 있습니다.

참고로, 위의 코드에서 Time 클래스의 getter 함수는 const 함수로 선언되어 있습니다. 이는 멤버 변수를 수정하지 않고 값을 반환하는 함수에서 사용하면 좋습니다.

switch 구문과 break continue 구문 강의 질문드립니다

0

60

1

opreator*

0

79

1

cin은 c언어에서의 scanf와 동일하다고 봐도 될까요?

0

140

0

질문이 있습니다.

0

109

1

temp1 선언

0

91

1

const MyStruct& 사용

0

114

0

인트형 포인터의 사이즈가 8이 나옵니다.

0

219

1

MyStruct* temp = new MyStruct; 에서 temp도 delete를 해야하나요?

0

129

1

#include <iostream> 중복

0

155

1

int sum=sumArr(arr. SIZE) 문의

0

137

1

4:04질문입니다.

0

112

1

4:39 질문입니다.

0

130

1

질문있습니다.

0

105

1

질문있습니다.

0

108

1

9:11 b에는 a이 주소값이 들어갔다고 하는데 *b의 값이 왜 a랑 같은 값이 나오나요?

0

163

1

빌드 실패 오류 질문 드립니다!

0

397

1

추상화와 클래스중 질문

0

177

1

질문사항 있습니다..동작을 안하고 있어요..

0

340

2

질문 드립니다

0

189

1

함수와 구조체 강의 음성이 이상합니다.

0

200

1

분할 컴파일 과정에서의 오류 발생

0

607

2

<<, >> 비트 연산자에 대한 설명이 맞나요?

0

453

2

포인터 연산

0

390

2

비주얼 스튜디오 코드를 사용해도 되나요?

0

805

1