Существует ли связь между перегрузкой функций и ориентацией объектов в C ++?
И если да, то каково это отношение?
Они связаны в том смысле, что одной из особенностей большинства объектно-ориентированных систем является своего рода полиморфизм, а перегрузка также обеспечивает форму полиморфизма (в частности, форму специального полиморфизма).
C ++ обеспечивает полиморфизм в основном тремя способами:
И тот факт, что каждая из этих функций обеспечивает своего рода полиморфизм, делает их взаимосвязанными.
Это отдельные понятия.
Как уже упоминалось, перегрузка использует тип для определения функции.
Объектно-ориентированное программирование — это логическая организация данных и функций с помощью концепции моделируемой вещи — часто реальной вещи или ее абстракции.
Языки, которые пытаются решить похожие проблемы, часто предоставляют обе возможности, но один может использовать один инструмент, а другой — без вреда.
Перегрузка функций связана с одной из самых глубоких идей в ориентации объекта: идея о том, что тип данных диктует, как ведет себя функция или оператор.
С этим связана идея перегрузки операторов. Оператор (такой как + или -) может быть применен к различным типам данных, и оператор будет делать правильные действия для задействованных типов.
Вы также можете написать операторские функции для своих собственных типов.
Вы можете видеть перегрузку операторов в основном языке. Добавление двух целых чисел и добавление двух чисел с плавающей точкой требуют разных машинных инструкций.
Компилятор C ++ выполняет различные низкоуровневые процедуры в зависимости от типов в выражении:
a + b
Если типы аргументов изменяются, компилятор генерирует разные инструкции.
Еще раз, идея глубоко укоренилась в объектной ориентации: тип задействованных данных диктует поведение функции.
Однако перегрузка не является полной реализацией этой идеи. Информация о типе может быть несовершенно известна во время компиляции. Вот где полиморфизм вступает в игру.