Розробка класу обробки геометричних фігур та їх даних за допомогою динамічних масивів даних стандартної бібліотеки шаблонів STL – послідовні контейнери deque
13

Якщо тип класу – Circle(if(typeid(*(*it))==typeid(Circle))) – тоді в файловий рядок записуюється «C» та за допомогою перегруженого оператора ostream& operator<<( ostream& os, Figure& f ) виконується запис у файл конкретного екземпляру класу: out <<(*((Circle*)(*it))); Якщо тип класу – Elipse – ті ж самі дії, тільки замість Circle пишемо Elipse.

Void Programm:: load(); - завантажує колекцію з файлу. Викликає функцію int Programm::readFigures(deque <Figure*> &figures), яка повертає кількість зчитаних фігур. У середині файлу створюється файловий потік та відкривається для читання : ifstream in("figures.dat");

Об’являються змінні –

Circle* c; // Показчик на Circle

Elipse* e; // Показчик на Elipse

int count=0; // Кількість зчитаних фігур

string line; // Строковий рядок для читання з файлу

string objType; // Тип об’єкту

У циклі, доки не кінець файлу, зчитується рядок, та перевіряється перший символ, який відповідає за тип файлу :

getline(in, line);

objType =  line.substr(0, 1);

line.erase(0, line.find('\t')+1);

Якщо тип об’єкту – Circle, то виділяється пам’ять під Circle, за допомогою string& operator>>(string& line, Figure& f) ідє зчитування об’єту з фалу. Після чого він додається до колекції.

if(objType == "C"){

c = new Circle();

line >> (*c);

figures.push_back(c);

count++;

}

Так само і з об’єктом типу Elipse:

if(objType == "E"){//Это объект Elipse

e = new Elipse();

line >> (*e);

figures.push_back(e);

count++;

}