Алгоритмы и структуры данных на С++. Аксёнова Е.А - 39 стр.

UptoLike

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, при завершении работы функции или в конце про-
граммы.