CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ 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로 쓸 수도 없구요.
가능하면 캐스트 연산자를 쓰지 않는 편이 좋다고 하는데요.
이 경우는 불가피한 경우인가요?
아니면 캐스트 연산자를 안써도 되는 방법이 있습니까?



[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.