Vad är operatörsöverbelastning?

Operatörsöverbelastning är en funktion för datorprogrammeringsspråk som gör att en programmerare kan åsidosätta en standardoperatör. När operatörsfunktionen är överbelastad kan den deklareras med anpassade argument som är andra datatyper än vad operatören kunde hantera som standard. De nya parametrarna kan vara primitiva eller användardefinierade typer. Inom huvuddelen av den överordnade funktionen kan en programmerare manipulera parametervärdena efter önskemål. Genom att använda operatörsöverbelastning kan en programmerare skapa intuitiva genvägar för att manipulera användardefinierade datatyper eller ändra hur standarddatatyper hanteras.

När användardefinierade datatyper skapas finns det inget sätt att utföra enkla operativa uppgifter, som att lägga till två av dem tillsammans eller öka interna data genom att använda den unära inkrementoperatorn med datatypen. Operatörer, inklusive tilläggssymbolen, kan åsidosättas så att om de används som binära operatorer mellan två anpassade datatyper returnerar de ett användardefinierat resultat. På samma sätt kan en unär operator, som inkrementeringsoperatorn, åsidosättas för att öka ett internt värde inom den användardefinierade typen.

När en operatör är överbelastad måste kompilatorn fatta ett beslut om vad den ska göra när den stöter på en överbelastad operatör. Kompilatorn bestämmer vilken åtgärd som ska vidtas baserat på vilka datatyper som används som operander, eller i samband med operatören. Om operanderna, som är parametervärden för operatörsfunktionen, är användardefinierade datatyper, kommer kompilatorn att välja den överbelastade funktionen som har parametrar som matchar operanderna som används.

Datorspråk varierar i hur de tillåter denna typ av ad-hoc polymorfism. Olika språk kan tillåta skapandet av nya anpassade operatörer, överbelastning av alla eller några av dess operatörer, eller kanske inte tillåter operatörsöverbelastning alls. C++, C#, PHP och Perl tillåter alla att vissa av deras operatörer överbelastas. Operatörsöverbelastning är inte tillåten i C, Java och Javascript.

Både operatörsöverbelastning och funktionsöverbelastning i allmänhet har varit föremål för en del debatt. Vissa hävdar att om man ger programmeraren friheten att ändra hur en operatör beter sig kan det innebära att andra programmerare som använder den anpassade koden kan skapa oavsiktliga fel. Den motsatta synpunkten föreslår att att tillåta operatörsöverbelastning ger programmerare möjligheten att skapa intuitiv och koncis kod som blir lättare att förstå, kosta mindre att producera och minska fel.