2012-07-01 19 views
0

我有一個文件,其中包含名稱,顏色和一些關於它們的統計信息的列表。 例如:使用異構數組來存儲不同的子類?

John black 10 15 
Adam black 19 18 
Jake brown 13 51 56 62 
Rich brown 13 09 98 84 

我希望能夠根據自己的顏色,以存儲在各自的對象那些名字,顏色和數字。 所以約翰和亞當,將存儲在班級黑色, 傑克和裏奇將存儲在班級布朗。

我怎麼能存儲每個人在各自的對象,因爲它們是不同的類型?

class Color{ 
    public: 
    Color(string FIRST, string COLOR); 
    protected: 
    string FirstName; 
    string ColorType; 

}; 

class Black : public Color{ 
    public: 
    Black(string FIRST, string COLOR, int A, int B); 
    private: 
    string FirstName; 
    string ColorType; 
    int number1, number2; 
}; 

class Brown : public Color{ 
    public: 
    Brown(string FIRST, string COLOR, int A, int B, int C, int D); 
    private: 
    string FirstName; 
    string ColorType; 
    int number1, number2, number3, number4; 
}; 
+1

你肯定繼承是你想要的是什麼?沒有任何錯誤,你在做什麼,但沒有任何多態行爲,我沒有看到你從基類Color得到什麼好處。如果沒有基類指針列表的多態性並沒有多大好處。 – mathematician1975

+0

是的,我並不想在派生類中輸入名稱和顏色類型,我會將名稱存儲在顏色類中,然後將數字存儲在派生類中。 – nub

回答

6

讓基類指針的容器:

std::vector<std::unique_ptr<Color>> colors; 

,並插入分配的派生類:

colors.emplace_back(new Black("John", "Black", 10, 15)); 
+0

好吧,我會試試看,謝謝! – nub

0

通常,您將擁有指向基本類型的指針列表,並創建派生類型的實例。請參閱Dave的答案,瞭解如何使用C++ 11來完成此任務。對於較舊版本的C++,通常會使Color析構函數變爲虛擬,並創建一個包裝來管理內存,或者使用boost。

+0

甜蜜,謝謝! – nub

相關問題