16. В этой части лабораторной работы изучим первые два
типа полиморфизма — это: а) принудительное приведение типа;
б) перегрузка функций и операторов.
17. Напишите функцию приведения типа. Для этого с по-
мощью ключевого слова operator напишите функцию объекта
Person, которая преобразует тип Person в double. Пусть функция
возвращает возраст человека, например:
Person::operator double() { return this->Age; }.
Что означает ключевое слово this?
18. Проверьте функцию преобразования типа. В функции
int main() далее определите переменную double и присвойте ей
объект Person, например:
double age = group.GetPerson(2);.
То есть совершается неявное преобразование из типа Person
в тип double при обращении к объекту. Выведите значение пе-
ременной на экран.
19. Перегруженные функции имеют одинаковое название,
но разный возвращаемый тип или/и разный список аргументов.
Определите в объекте Group две функции с одинаковым име-
нем, например: double Age(); и double Age(int limit);. Первая
функция пусть возвращает средний возраст группы людей, а
вторая функция пусть возвращает средний возраст людей в
группе, возраст которых не больше некоторого граничного зна-
чения limit. Функции отличаются списком аргументов.
20. Проверьте работу перегруженных функций, отобразив
на экране подсчитанные два значения среднего возраста.
21. Перегрузите оператор индексирования. Если раньше,
чтобы обратиться к элементу массива, нам необходимо было
вызывать функцию GetPerson, то, определив оператор индекси-
рования, мы будем использовать только квадратные скобки.
Сравните две строки кода:
Person man = group.GetPerson(2);
Person man = group[2];
В объекте Group с помощью ключевого слова operator оп-
ределите оператор индексирования, например:
Person& Group::operator[](int i).
В теле оператора напишите код, возвращающий i-тый эле-
мент массива, т.е. объект Person.
22. Выведите на экран с помощью оператора индексирова-
ния любой один элемент массива group, например третий.
23. Перегрузите бинарный оператор, например оператор
сложения (+), для объекта Person. Пусть оператор сложения
будет возвращать суммарный возраст двух человек. Опишите в
объекте Person данный оператор как дружественную функцию с
помощью ключевого слова friend, например:
friend double operator+(Person& p1, Person& p2);
Эта строка кода означает, что оператор сложения не при-
надлежит объекту, но ему доступны все закрытые данные и ме-
тоды объекта.
В файле person.cpp определите оператор сложения, напри-
мер:
double operator + (Person& p1, Person& p2)
{ return (p1.Age + p2.Age); }
Здесь мы напрямую обращаемся к закрытому полю Age
объекта Person.
24. Проверьте работу оператора с помощью следующих
строк кода:
double sum = group[1] + group[3];
cout