2013-10-28 63 views
0

如果我正在編寫從父類派生的類到文件,我如何確定從文件中讀取哪個類?從文件中讀取的多態性

基本上我有3個派生類:DerivedADerivedB,DerivedC。當寫入文件我已經做到了這一點:

DerivedA 
    attribute1 
    attribute2 
    attribute9 
DerivedB 
    attribute5 
    attribute6 
DerivedC 
    attribute4 
    attribute7 

如何設置我的if語句上來判定我目前在讀哪一類?

編輯:

我建立具有特定不同的屬性,以每個家庭家庭的表。

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必須知道有多少屬性具有,或知道「圓木」不能是它的一個屬性,因此必須在構造函數終止之前放回流中)。