#include "group.h"
#include <string.h>
//Конструктор
Group::Group(unsigned size)
:_size(size)//размер массива
,_persons(size ? new Person[size] : 0)/*Выделеие памяти*/{}
//Деструктор
Group::~Group()
{delete[] _persons;/*Освобождение памяти*/}
//Вывод данных о хранимых элементах
void Group::Print() const 
{cout << *this;/*Оператор <<*/}
//Возврат размера массива
unsigned Group::Size() const {return _size;}
//Вставка элемента в указанную позицию 
void Group::PutPerson(int index, Person const& man)
{_persons[index] = man;}
//Получение ссылки на элемент в указанной позиции
Person const& Group::GetPerson(int index) const {return _persons[index];}
//Средний возраст в группе
float Group::Age() const
{float sum = 0;//Сумма
for (unsigned i = 0; i < _size; ++i)
sum += _persons[i];
return _size ? sum/_size : 0;}
//Средний возраст среди лиц не старше limit
float Group::Age(int limit) const
{float sum = 0;//Сумма возрастов
unsigned count = 0;//Количество элементов 
for (unsigned i = 0; i < _size; ++i)
{if(_persons[i] <= limit)//Сравнение по возрастному ограничению
{sum += _persons[i]; ++count;}}
return count ? sum/count : 0;}
//Перегруженный оператор [] - получение ссылки на элемент в указанной позиции
Person& Group::operator[](int index)
{return _persons[index];}
//Сравнение двух групп
bool Group::operator==(Group const& other) const
{if(_size != other._size)
return false;//Размеры не равны
for(unsigned i = 0; i < _size; ++i)
if(_persons[i] != other._persons[i])//Использование оператора != из класса Person
return false;//Если есть неравные элементы
return true;/*Если элементы равны*/}
//Поиск по номеру
Person* Group::FindPerson(int number)
{for(unsigned i = 0; i < _size; ++i)
if(number == _persons[i].GetNumber())
return _persons+i;
return 0;/*Поиск не дал результатов*/}
//Поиск по возрасту 
Person* Group::FindPerson(float age)
{for(unsigned i = 0; i < _size; ++i)
if(age == _persons[i].GetAge())
return _persons+i;
return 0;/*Поиск не дал результатов*/}
//Поиск по имени
Person* Group::FindPerson(const char* fio)
{for(unsigned i = 0; i < _size; ++i)
if(fio == _persons[i].GetFio())
return _persons+i;
return 0;/*Поиск не дал результатов*/}
//Оператор вывода в поток
ostream& operator <<(ostream& os, Group const& g)
{for(unsigned i = 0; i < g.Size(); ++i)
os<<"Person #"<<i<<":\n"<<g.GetPerson(i);
os<<(g.Size()?"":"empty")<< endl;
return os;}
Соседние файлы в папке Лабораторная_2_Высокоуровневые методы информатики и программирования ()