| [ CnUnix ] in KIDS 글 쓴 이(By): doldori (돌돌이) 날 짜 (Date): 2003년 1월 4일 토요일 오후 02시 57분 09초 제 목(Title): 유도클래스에서 << 연산자 재정의 문제 다음과 같은 코드가 있습니다 #include <iostream> using namespace std; class Base { private: int var_b; public: Base(int b = 0) { var_b = b; } friend ostream & operator <<(ostream & os, const Base & b); }; class Derived : public Base { private: int var_d; public: Derived(int b = 0, int d = 1) : Base(b) { var_d = d; } friend ostream & operator <<(ostream & os, const Derived & d); }; ostream & operator <<(ostream & os, const Base & b) { os << b.var_b; return os; } ostream & operator <<(ostream & os, const Derived & d) { os << (Base &) d << ", " << d.var_d << endl; <---- 주목할 statement -------- return os; } int main() { Base b_obj; Derived d_obj; cout << b_obj << endl; cout << d_obj << endl; return 0; } 코드에서 밑줄을 친 곳을 보면 (Base &) 캐스트 연산자를 썼습니다. 이것을 쓰지 않으면 ostream & operator <<(ostream & os, const Derived & d)를 호출하므로 ostream & operator <<(ostream & os, const Base & b)를 호출하려는 저의 의도에 맞지 않습니다. 공용상속이므로 os << d.var_b로 쓸 수도 없구요. 가능하면 캐스트 연산자를 쓰지 않는 편이 좋다고 하는데요. 이 경우는 불가피한 경우인가요? 아니면 캐스트 연산자를 안써도 되는 방법이 있습니까? |