Составители:
Рубрика:
3.5. Перегрузка операций 39
которого она вызывается, в то время как интерпретация вызова невир-
туальной функции-члена класса зависит лишь от типа указателя или
ссылки, указывающей на этот объект. Например, bp->vf1() вызыва-
ет derived::vf1, потому что bp указывает на объект класса derived,
в котором derived::vf1() подменила виртуальную функцию base
::vf1(). Это свойство делает производные классы и виртуальные
функции важными понятиями при разработке многих С++ программ.
Базовый класс определяет интерфейс, для которого производные клас-
сы обеспечивают набор реализаций. Указатель на объект класса мо-
жет передаваться в контекст, где известен интерфейс, определенный
одним из его базовых классов, но этот производный класс неизве-
стен. Механизм виртуальных функций гарантирует, что этот объект
все равно обрабатывается функциями, определенными для него (а не
функциями, определенными для базового класса). При этом будут вы-
зываться только функции, имена которых определены в интерфейсе
базового класса, и только при соответствии их фактических парамет-
ров требуемым формальным параметрам. Возможность обращения к
нескольким функциям с одним общим интерфейсом, которая обес-
печивается виртуальными функциями, называется полиморфизмом.
Если точный тип объекта известен во время компиляции, механизм
вызова виртуальных функций не нужен.
3.5. Перегрузка операций
В данном разделе на простом примере проиллюстрированы поня-
тия перегрузки операций и конструктора.
Перегрузка операций – это придание нового смысла знакам опера-
ций.
В С++ существует ряд ограничений на перегрузку операций. Опе-
рации и символы препроцессора ., .*, ::, ?:, #, ## нельзя перегру-
жать, нельзя менять старшинство, ассоциативность и число операн-
дов, нельзя вводить новые знаки операций.
Конструктор превращает некоторую область памяти в объект. Де-
структор превращает объект в область памяти. Деструктор автома-
тически вызывается при освобождении памяти, т. е. при выполнении
операции delete, при завершении работы функции или в конце про-
граммы.
3.5. Перегрузка операций 39 которого она вызывается, в то время как интерпретация вызова невир- туальной функции-члена класса зависит лишь от типа указателя или ссылки, указывающей на этот объект. Например, bp->vf1() вызыва- ет derived::vf1, потому что bp указывает на объект класса derived, в котором derived::vf1() подменила виртуальную функцию base ::vf1(). Это свойство делает производные классы и виртуальные функции важными понятиями при разработке многих С++ программ. Базовый класс определяет интерфейс, для которого производные клас- сы обеспечивают набор реализаций. Указатель на объект класса мо- жет передаваться в контекст, где известен интерфейс, определенный одним из его базовых классов, но этот производный класс неизве- стен. Механизм виртуальных функций гарантирует, что этот объект все равно обрабатывается функциями, определенными для него (а не функциями, определенными для базового класса). При этом будут вы- зываться только функции, имена которых определены в интерфейсе базового класса, и только при соответствии их фактических парамет- ров требуемым формальным параметрам. Возможность обращения к нескольким функциям с одним общим интерфейсом, которая обес- печивается виртуальными функциями, называется полиморфизмом. Если точный тип объекта известен во время компиляции, механизм вызова виртуальных функций не нужен. 3.5. Перегрузка операций В данном разделе на простом примере проиллюстрированы поня- тия перегрузки операций и конструктора. Перегрузка операций – это придание нового смысла знакам опера- ций. В С++ существует ряд ограничений на перегрузку операций. Опе- рации и символы препроцессора ., .*, ::, ?:, #, ## нельзя перегру- жать, нельзя менять старшинство, ассоциативность и число операн- дов, нельзя вводить новые знаки операций. Конструктор превращает некоторую область памяти в объект. Де- структор превращает объект в область памяти. Деструктор автома- тически вызывается при освобождении памяти, т. е. при выполнении операции delete, при завершении работы функции или в конце про- граммы.
Страницы
- « первая
- ‹ предыдущая
- …
- 37
- 38
- 39
- 40
- 41
- …
- следующая ›
- последняя »