Skip to main content

Что такое перегрузка оператора?

Перегрузка оператора - это функция языка программирования, которая позволяет программисту переопределить оператор по умолчанию. Когда функция оператора перегружена, она может быть объявлена ​​с пользовательскими аргументами, которые имеют типы данных, отличные от того, что оператор мог обрабатывать по умолчанию. Новые параметры могут быть примитивными или определяемыми пользователем типами. В теле переопределяющей функции программист может манипулировать значениями параметров по желанию. Используя перегрузку операторов, программист может создавать интуитивно понятные ярлыки для управления пользовательскими типами данных или изменять способы обработки типов данных по умолчанию.

Когда создаются определяемые пользователем типы данных, невозможно выполнить простые рабочие задачи, такие как сложение двух из них вместе или увеличение внутренних данных с помощью унарного оператора приращения с типом данных. Операторы, включая символ добавления, могут быть переопределены, так что если они используются в качестве двоичных операторов между двумя пользовательскими типами данных, они возвращают определенный пользователем результат. Таким же образом унарный оператор, такой как оператор приращения, может быть переопределен для увеличения внутреннего значения в определяемом пользователем типе.

Как только оператор перегружен, компилятор должен принять решение о том, что делать, когда он сталкивается с перегруженным оператором. Компилятор решает, какое действие предпринять, основываясь на том, какие типы данных используются в качестве операндов или в сочетании с оператором. Если операнды, которые являются значениями параметров для функции оператора, являются пользовательскими типами данных, компилятор выберет перегруженную функцию, параметры которой соответствуют используемым операндам.

Компьютерные языки различаются по тому, как они допускают этот тип специального полиморфизма. Различные языки могут разрешать создание новых пользовательских операторов, перегрузку всех или некоторых из их операторов или могут вообще не разрешать перегрузку операторов. C ++, C #, PHP и Perl позволяют перегрузить некоторые их операторы. Перегрузка операторов не допускается в C, Java и Javascript.

Как перегрузка операторов, так и перегрузка функций в целом были предметом некоторых дискуссий. Некоторые утверждают, что предоставление программисту свободы изменять поведение оператора может привести к созданию непреднамеренных ошибок другими программистами, которые используют настраиваемый код. Противоположная точка зрения предполагает, что допускающая перегрузку операторов дает программистам возможность создавать интуитивно понятный и лаконичный код, который будет легче понять, дешевле производить и уменьшить количество ошибок.