En programació d'ordinadors, la sobrecàrrega d'operadors, de vegades anomenada polimorfisme ad hoc d'operadors, és un cas específic de polimorfisme, on diferents operadors tenen diferents implementacions depenent dels seus arguments. La sobrecàrrega de l'operador es defineix generalment per un llenguatge de programació, un programador o ambdós.

Justificació La sobrecàrrega de l'operador és un sucre sintàctic, i s'utilitza perquè permet programar utilitzant una notació més propera al domini objectiu i permet als tipus definits per l'usuari un nivell similar de suport sintàctic que els tipus integrats en un llenguatge. És habitual, per exemple, en la informàtica científica, on permet manipular representacions computacionals d'objectes matemàtics amb la mateixa sintaxi que en el paper.

La sobrecàrrega de l'operador no modifica el poder expressiu d'un llenguatge (amb funcions), ja que es pot emular mitjançant trucades de funcions. Per exemple, considereu les variables , i d'algun tipus definit per l'usuari, com ara les matrius :

En un llenguatge que admet la sobrecàrrega d'operadors, i amb el supòsit habitual que l'operador '*' té una prioritat més alta que l'operador '+', aquesta és una manera concisa d'escriure:

Tanmateix, la sintaxi anterior reflecteix l'ús matemàtic comú.

Exemples En aquest cas, l'operador d'addició està sobrecarregat per permetre l'addició en un tipus definit per l'usuari en C++:Time operator+(const Time& lhs, const Time& rhs) { Time temp = lhs; temp.seconds += rhs.seconds; temp.minutes += temp.seconds / 60; temp.seconds %= 60; temp.minutes += rhs.minutes; temp.hours += temp.minutes / 60; temp.minutes %= 60; temp.hours += rhs.hours; return temp; }L'addició és una operació binària, el que significa que té dos operands. En C++, els arguments que es passen són els operands i l'objecte és el valor retornat. L'operació també es podria definir com un mètode de classe, substituint per l'argument hidden ; Tanmateix, això obliga l'operand esquerre a ser del tipus :// The "const" right before the opening curly brace means that |this| is not modified. Time Time::operator+(const Time& rhs) const { Time temp = *this; // |this| should not be modified, so make a copy. temp.seconds += rhs.seconds; temp.minutes += temp.seconds / 60; temp.seconds %= 60; temp.minutes += rhs.minutes; temp.hours += temp.minutes / 60; temp.minutes %= 60; temp.hours += rhs.hours; return temp; }

Catàleg Es fa una classificació d'alguns llenguatges de programació comuns segons si els seus operadors són sobrecarregables pel programador i si els operadors estan limitats a un conjunt predefinit. OperadorsNo es pot sobrecarregarSobrecàrregaNou definible ML Pico Pròleg Xerrada ALGOL 68 Clojure Eiffel Fortran Futhark F# Haskell Io Nim R Raku Scala Llavor 7 SwiftConjunt limitat BÀSIC C Vés Java JavaScript Mòdul-2 Objectiu-C Pascal TypeScript Visual Basic Ada C# C++ Ceilan D Dard FreeBASIC Genial Java Kotlin Lua MATLAB Object Pascal (Free Pascal, Delphi (des de 2005)) PHP (utilitzant mètodes màgics, interfície ArrayAccess o extensió de l'operador) Perl Python Rubí Rovell Visual Basic. NET

Referències

Categoria:Llenguatge de programació C