C++ STL; Реализовать иерархию классов
1) Наследование и полиморфизм. Сделать базовый класс Person. Помимо базового класса реализовать не менее 5 производных классов и, по крайней мере, 3 уровня в иерархии (н-р, класс С наследует B, а класс B наследует A). В каждом классе ввести закрытые поля и открытые методы доступа к полям. В базовом классе ввести виртуальные методы (н-р, toString, show), в производных классах ввести переопределения виртуальных методов. Ввести статические элементы хотя бы в 3 классах (н-р, статическое поле - наибольший рост человека Human::MaximalGrowth). В главном модуле (с функцией main) ввести массив указателей на объекты базового класса. Число элементов массива можно задать константой (N >= 10) или определять динамически в программе. Заполнить массив объектами разных типов. Выполнить обработку массива объектов для того, чтобы:
- подсчитать количество объектов каждого типа; для проверки типа объекта в массиве можно использовать операторы dynamic_cast или typeid;
- вывести информацию по каждому объекту, используя виртуальные методы базового класса (н-р, show или toString);
- найти объекты, удовлетворяющие условию; например, найти студентов с самым ранним годом поступления.
Предусмотреть освобождение динамической памяти.
2) Работа с контейнерами и алгоритмами STL.
Сделать базовый класс City. В классе введите по крайней мере три поля разного типа (н-р, int, string, float). Реализуйте консольное меню для возможности работы с коллекцией объектов (добавление, удаление и вывод). В качестве коллекции можно использовать контейнер из STL (vector, list, stack, map и т.п.). Через консольное меню реализуйте возможность выполнения следующих операций: сортировка элементов, поиск максимального или минимального элемента (н-р, поиск города с наибольшей численностью), вычисление агрегированного значения (н-р, суммарное население городов), поиск элемента по заданному названию (н-р, поиск по названию города), поиск элемента, удовлетворяющего условию (н-р, поиск города с площадью, большей чем 20 000 км2 ). Для реализации операций используйте алгоритмы STL (заголовочные файлы algorithm, functional): sort, min_element, transform, accumulate, for_each, find_if.
!!!! Пожалуйста, комментируйте код так, чтобы было понятно, что делает каждая строчка!