ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 11) онлайн
Резюме
Виртуальные функции позволяют решать прямо в процессе выполнения про-
граммы, какую именно функцию вызывать. Без их использования это решение
принимается на этапе компиляции программы. Виртуальные функции дают боль-
шую гибкость при выполнении одинаковых действий над разнородными объек-
тами. В частности, они разрешают использование функций, вызванных из масси-
ва указателей на базовый класс, который на самом деле содержит указатели (или
ссылки) на множество порожденных классов. Это пример полиморфизма. Обыч-
но функция объявляется виртуальной в базовом классе, а другие функции с тем
же именем объявляются в порожденных классах.
Использование по крайней мере одной чистой виртуальной функции делает
весь класс, содержащий ее, абстрактным. Это означает, что с помощью этого
класса нельзя создавать никакие объекты.
Дружественная функция имеет доступ к скрытым данным класса, по отно-
шению к которому она объявлена таковой. Это бывает полезно, когда одна функ-
ция должна иметь доступ к двум и более не связанным между собой классам и
когда перегружаемая операция должна, со своей стороны, использовать данные
«чужого» класса, методом которого она не является. Дружественность также ис-
пользуется для упрощения записи функций.
Статической называется функция, работающая с классом в целом, а не над
отдельными его объектами. В частности, она может обрабатывать статические
переменные. Она может быть вызвана с использованием имени класса и опера-
тора явного задания функции.
Оператор присваивания = может быть перегружен. Это необходимо, когда он
должен выполнять более сложную работу, нежели простое копирование содер-
жимого одного объекта в другой. Конструктор копирования, создающий копии
объектов во время инициализации и во время передачи аргументов и возврата
результата по значению, также может быть перегружен. Это необходимо, когда
он должен выполнять более сложную работу, чем простое копирование объекта.
Указатель this может использоваться в функции для указания на объект, чьим
методом он является. Он пригодится, если в качестве результата возвращается
объект, чьим методом является данная функция.
Оператор dynamic_cast умеет многое. С его помощью можно определить, на
объект какого типа ссылается указатель, можно в некоторых ситуациях изме-
нять тип указателя. Оператор typeid позволяет узнать кое-что о классе объекта,
например его название.
Объектная диаграмма UML показывает отношения внутри группы объектов
в определенный момент работы программы.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
