작성
·
619
0
클래스를 상속할때Time객체의 show함수를 << 연산자 오버로딩으로 대체한것처럼 Time 클래스를 상속한 NewTime 객체도 << 연산자를 오버로딩 할 수 없나요? hours와 mins가 Time의 private이라서 접근할 수 없다고 나오는데 다른 방법이 없는지 궁금합니다.
답변 1
0
안녕하세요, 인프런 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 함수로 선언되어 있습니다. 이는 멤버 변수를 수정하지 않고 값을 반환하는 함수에서 사용하면 좋습니다.