Отчёт (1079117), страница 2
Текст из файла (страница 2)
cout <<"Ошибка.\n";
system("Pause");
exit(EXIT_FAILURE);
}
strcpy(name, "");
diametr= 0;
life= false;
sat= 0;
size= sz;
}
planet::planet(char *stroka, long int d, bool l, int s, int sz) { //Инициализации
try{
name= new char[sz];
}catch(bad_alloc xa){
cout <<"Ошибка.\n";
system("Pause");
exit(EXIT_FAILURE);
}
strcpy(name, stroka);
diametr= d;
life= l;
sat= s;
size= sz;
}
planet::planet(const planet &ob) //Копирования
{
try{
name= new char[ob.size];
}catch(bad_alloc xa){
cout <<"Ошибка.\n";
system("Pause");
exit(EXIT_FAILURE);
}
for(int i= 0; i < ob.size; i++)
name[i]= ob.name[i];
diametr= ob.diametr;
life= ob.life;
sat= ob.sat;
}
//------------------------Функции члены класса----------------------
void planet::filling(char *stroka, long int d, bool l, int s){
strcpy(name, stroka);
diametr= d;
life= l;
sat= s;
}
//---------------------------Перегрузка операторов------------------ostream &operator << (ostream &stream, planet op) { //<< << << << << << << << << << << << <<
stream <<setw(10) <<op.name <<setw(10) <<op.diametr <<setw(7) <<op.life <<setw(7) <<op.sat <<"\n";
return stream;
}
istream &operator >> (istream &stream, planet &op) { //>> >> >> >> >> >> >> >> >> >> >> >> >>
stream >>op.name >>op.diametr >>op.life >>op.sat;
return stream;
}
planet planet::operator = (planet op2) { //= = = = = = = = = = = = = = = = = = =
strcpy(name, op2.name);
diametr= op2.diametr;
life= op2.life;
sat= op2.sat;
return *this;
}
bool planet::operator > (planet op2) { //> > > > > > > > > > > > > > > > > > >
if(diametr > op2.diametr) return 1;
else return 0;
}
bool planet::operator < (planet op2) { //< < < < < < < < < < < < < < < < < < <
if(diametr < op2.diametr) return 1;
else return 0;
}
bool planet::operator != (planet op2){ //!= != != != != != != != != != != != !=
if(diametr != op2.diametr) return 1;
else return 0;
}
Анализ результата.
В результате всё работает. Для примера сортируется, редактируется, выводится солнечная система, уничтожается всё население земли.
1)Измените функцию сравнения так, чтобы параметры передавались по значению (а не по ссылке). Выполните сортировку, и определите максимальное число объектов типа Planeta в памяти и как изменился вызов конструктора копирования. Объясните результат.
Каждый раз при вызове конструктора копирования создаётся новый объект класса “Планета” (копия передаваемого в функцию). При этом при сортировке создаётся и помещается в память порядка 13 объектов.
2)Исключите из класса Planeta деструктор. Выполните несколько раз сортировку и определите максимальное число объектов типа Planeta в памяти. Объясните результат.
После выполнения десяти сортировок было создано 896 объектов. При создании такого большого количества объектов мой ноутбук не завис и не выдал ошибок потому, что в нём много оперативной памяти.