2012-03-25 2 views
0

부모 클래스와 하위 클래스가 있습니다. 둘 다 오버로드 >> 연산자입니다. 파일 (또는 화면)에서 부모 개체로 읽은 다음 자식 (또는 포인터 사용)으로 캐스팅해야합니다. 지금은 세트를 사용하고 있습니다.스트림 연산자 오버로딩 함수에서 커스트 또는 포인터를 사용하는 방법은 무엇입니까?

ifstream& operator>>(ifstream& ifs, Child& ch) 
{ 
    Parent p;  
    ifs >> ch.field >> p; 
    ch.setCh(p); 
    return(ifs); 
} 

void Ch::setCh(Parent pIn){setField1(pIn.getField1());} 

답변

0
한 가지 가능한 솔루션이 예에서 볼 수

:

#include <iostream> 
using namespace std; 

class A { 
public: 
    int val; 
    friend istream& operator>>(istream& in, A& a); 
}; 

istream& operator>>(istream& in, A& a) { 
cout << "Calling a::>>\n"; 
in >> a.val; 
return in; 
} 

class B : public A { 
public: 
    int val2; 
    friend istream& operator>>(istream& in, B& b); 
}; 

istream& operator>>(istream& in, B& b) { 
    cout << "Calling b::>>\n"; 
    in >> static_cast<A&>(b); 
    in >> b.val2; 
    return in; 
} 
int main(int argc, char** argv) { 
    B b; 
    cin >> b; 
    cout << b.val << " " << b.val2 << endl; 
    return 0; 
} 
+0

감사합니다! 항상 작은 것입니다. static_cast (b)에서 "&"를 놓쳤습니다. – nekto

관련 문제