2013-10-28 4 views
0

부모 클래스에서 파생 된 클래스를 파일에 쓰는 경우 파일에서 읽는 클래스를 어떻게 결정합니까?다형성 파일에서 읽기

기본적으로 나는 3 개의 유도 클래스를 가지고 있습니다 : DerivedA, DerivedB, DerivedC. 파일에 쓸 때 나는 이런 짓을했는지 : 내가 설정하는 방법

DerivedA 
    attribute1 
    attribute2 
    attribute9 
DerivedB 
    attribute5 
    attribute6 
DerivedC 
    attribute4 
    attribute7 

내 문까지 있다면이 순간에 읽고있다있는 클래스를 결정하는 방법?

편집 :

나는 각 가정에 특정 속성이 다른 가정의 목록을 구축하고있다. 내 데이터에

list<Homes*> home; 
Homes *tmp; 
while(ins>>tmp) 
{//determine which home it is 
    tmp=new ***//depends on which derived class it is; 
} 

는 말할 것이다 파일 :

Brickhome 
solar panels 
3 bathrooms 
Spiral Staircase 
LogCabin 
gravel driveway 
fireplace 
Castle 
10 butlers 
1 moat 

내가 작성해야하는 가정 결정하는 방법이 필요합니다.

+0

당신이 말하는 것을 설명하기 위해 실제 샘플 코드를 제공 할 수 있습니까? – nhgrif

+0

원래 게시물에 추가됨, 감사합니다. – Walter

+0

속성이 무엇인지 명확하지 않습니다. 포함 된 샘플 코드에는 실제로 질문이있는 부분과 관련이 없습니다. – nhgrif

답변

2

파생 된 파생 형식이 이름을 나타내는 줄을 읽기 전에 구성 할 수 없습니다. 무엇 할 첫 번째 줄을 읽은 다음 나머지 적절한 하위 클래스 생성자에 위임하는 함수가 있습니다. 서브 클래스가 정지 할 때 알 분별있는 방법이 있어야합니다

list<Homes*> home; 
string str; 
while(ins >> str) 
{ 
    switch(str) 
    { 
    Homes *tmp; 

    case "Brickhome": 
     tmp = new Brickhome(ins); 
     break; 
    case "LogCabin": 
     tmp = new LogCabin(ins); 
     break; 
    case "Castle": 
     tmp = new Castle(ins); 
     break; 
    default: 
     throw("unknown type of home"); 
    } 
    home.push_back(tmp); 
} 

주 (예 Brickhome는 얼마나 많은 특성을 알고, 또는 "LogCabin는"그 속성 중 하나가 될 수 없음을 알고, 따라서해야합니다 하나 생성자가 종료하기 전에 스트림에 다시 넣음).