согласен с
alexey_ma
лино я поступил бы примерно так (очень примерно):
Код:
//для Figure завел бы методы, в качестве параметров которым был бы,
//к примеру, дескриптор открытого файла.
virtual bool Read(int rFile);
virtual bool Write(int wFile);
//естественно для каждой фигуры переписал этот метод так чтобы
//она умела читать и писать инфу о себе в нужном виде.
//так же завел бы где-нибудь
Figure *CreateFigure(const figuretype &ft)
{
swtich(ft)
{
case circle:
return (Figure *)new Circle();
...
case cube:
return (Figure *)new Cube();
}
return (Figure *) new UnsupportedFigure(); //Ну или Exception выкидывать
}
//После чего в контейнере метор Read будет выглядеть примерно так.
{
int mFile;
//Открываем файл и читаем из него инфу всякую. потом доходим до
//самих фигур и читаем тип первой
while (!end)
{
Figure *newf=CreateFigure(readtype);
newf->Read(mFile);
m_storage.push_back(newf);
}
//Закрываем файл все прочитано
}
//Метод Write контейнера еще проще:
{
int mFile;
//Открываем файл и пришем в него инфу всякую
for (vector<Figure*>::const_iterator iter=m_storage.begin();
iter!=m_storage.end();iter++)
(*iter)->Write(mFile);
//Закрываем файл все записано
}
Естественно это просто набросок на вскидку, но уже здесь для добавления поддержки новых фигур в контейнере переписывать почти ничего не придется.