C++ Operator Överbelastning med exempel
Vad är Operator överbelastning?
Använda överbelastning av operatören in C++, kan du ange mer än en betydelse för en operatör i ett omfång. Syftet med operatörsöverbelastning är att ge en speciell betydelse av en operatör för en användardefinierad datatyp.
Med hjälp av operatörens överbelastning kan du omdefiniera majoriteten av C++ operatörer. Du kan också använda operatörsöverbelastning för att utföra olika operationer med en operatör.
syntax
Att överbelasta a C++ operatör, bör du definiera en speciell funktion i klassen enligt följande:
class class_name { ... .. ... public return_type operator symbol (argument(s)) { ... .. ... } ... .. ... };
Här är en förklaring till ovanstående syntax:
- Return_type är returtypen för funktionen.
- Därefter nämner du operatorns nyckelord.
- Symbolen anger operatörssymbolen som ska överbelastas. Till exempel, +, -, <, ++.
- Argumentet/argumenten kan skickas till operatorfunktionen på samma sätt som funktioner.
Exempelvis 1
#include <iostream> using namespace std; class TestClass { private: int count; public: TestClass() : count(5) {} void operator --() { count = count - 3; } void Display() { cout << "Count: " << count; } }; int main() { TestClass tc; --tc; tc.Display(); return 0; }
Produktion:
Här är en skärmdump av koden:
Kodförklaring:
- Inkludera iostream-huvudfilen i vår kod för att använda dess funktioner.
- Inkludera std-namnutrymmet i vårt program för att använda dess klasser utan att anropa det.
- Skapa en klass som heter TestClass.
- Använd modifieraren för privat åtkomst, som markerar en klassmedlem som privat tillgänglig.
- Skapa ett heltalsvariabelantal. Denna variabel kommer att vara privat tillgänglig.
- Använd modifieraren för offentlig åtkomst, som markerar en klassmedlem som privat tillgänglig.
- Använd en klasskonstruktor för att initiera variabelräknaren till 5.
- Överbelasta betydelsen av operatorn —.
- Operatören kommer att minska värdet på variabeln x med 1.
- Slutet på operatörens överbelastningssektion. Operatören har fått ett nytt namn.
- Definiera en funktion som heter Display() funktion.
- Skriv ut värdet för variabelantal tillsammans med annan text på konsolen när Display()-funktionen anropas. } markerar slutet på display()-funktionens brödtext.
- Slutet av klassens kropp.
- Anropa main()-funktionen. Programlogiken bör läggas till i denna funktion.
- Skapa en instans av klassen TestClass och ge den namnet tc.
- Detta kommer att anropa void-operatorn –()-funktionen.
- Använd inställningen för TestClass Class för att anropa Display()-funktionen.
- Funktionen måste returnera värde efter framgångsrikt slutförande.
- Slutet på kroppen av funktionen main().
Olika förhållningssätt till Operator Överbelastning in C++
Du kan utföra överbelastning av operatören genom att implementera någon av följande typer av funktioner:
- Medlemsfunktion
- Icke-medlemsfunktion
- Vänfunktion
- Operatörens överbelastningsfunktion kan vara en medlemsfunktion när en vänsteroperand är ett objekt i klassen.
- När vänsteroperanden är annorlunda, Operator överbelastningsfunktion bör vara en icke-medlemsfunktion.
Du kan göra operatörens överbelastningsfunktion till en vänfunktion om den behöver komma åt de privata och skyddade klassmedlemmarna.
Kan alla C++ Operators vara överbelastade?
Nej. Det finns C++ operatörer som inte kan överbelastas.
De innefattar:
- :: -Omfattningsupplösningsoperatör
- ?: -ternär operator.
- . -medlemsväljare
- Operatörens storlek
- * -medlemspekarväljare
Saker att komma ihåg
- Med operatörsöverbelastning kan du omdefiniera hur en operatör fungerar endast för de användardefinierade typerna (objekt, strukturer). Du kan inte använda den för inbyggda typer (float, char, int, etc.).
- = och & C++ operatörer är överbelastade som standard. Du kan till exempel kopiera objekten i samma klass direkt med operatorn =.
- Operator prioritet ändrar inte associativt och prioritet för operatörer. Du kan dock ändra utvärderingsordningen med parentes.
- Det finns fyra operatörer som du inte kan överbelasta i C++. De inkluderar omfångsupplösningsoperatorn (::), medlemsvalsoperator (.), medlemsval genom en pekare till funktionsoperator (.*) och den ternära operatorn (?:).
Regler för Operator överbelastning
Här finns regler för Operator överbelastning:
- För att det ska fungera måste minst en operand vara ett användardefinierat klassobjekt.
- Du kan bara överbelasta befintliga operatörer. Du kan inte överbelasta nya operatörer.
- Vissa operatörer kan inte överbelastas med en vänfunktion. Sådana operatörer kan dock överbelastas med hjälp av medlemsfunktionen.
Hur man överbelasta Operator
Exempelvis 1
#include <iostream> using namespace std; class OperatorOverload { private: int x; public: OperatorOverload() : x(10) {} void operator ++() { x = x + 2; } void Print() { cout << "The Count is: " << x; } }; int main() { OperatorOverload ov; ++ov; ov.Print(); return 0; }
Produktion:
Här är en skärmdump av koden:
Kodförklaring:
- Inkludera iostream-huvudfilen i vår kod för att använda dess funktioner.
- Inkludera std-namnutrymmet i vårt program för att använda dess klasser utan att anropa det.
- Skapa en klass med namnet OperatorOverload.
- Använd modifieraren för privat åtkomst, som markerar en klassmedlem som privat tillgänglig.
- Skapa en heltalsvariabel x. Denna variabel kommer att vara privat tillgänglig.
- Använd modifieraren för offentlig åtkomst, som markerar en klassmedlem som privat tillgänglig.
- Använd en klasskonstruktor för att initiera variabel x till 10.
- Överbelasta innebörden av ++ operatorn.
- Operatören kommer att öka värdet på variabel x med 2.
- Slutet på operatörens överbelastningssektion. Operatören har fått ett nytt namn.
- Anropar Print()-funktionen.
- Skriv ut värdet på variabel x tillsammans med annan text på konsolen när funktionen Print() anropas.
- Slutet av brödtexten för Print()-funktionen.
- Slutet av klassens kropp.
- Anropa main()-funktionen. Programlogiken bör läggas till i denna funktion.
- Skapa en instans av OperatorOverload Klass som heter ov.
- Detta kommer att anropa void-operatorn ++()-funktionen.
- Använd hållningen av OperatorOverload-klassen för att anropa Print()-funktionen.
- Funktionen måste returnera värde efter framgångsrikt slutförande.
- Slutet på kroppen av funktionen main().
Exempelvis 2
#include<iostream> using namespace std; class TestClass { private: int real, over; public: TestClass(int rl = 0, int ov = 0) { real = rl; over = ov; } TestClass operator + (TestClass const &obj) { TestClass result; result.real = real + obj.real; result.over = over + obj.over; return result; } void print() { cout << real << " + i" << over << endl; } }; int main() { TestClass c1(9, 5), c2(4, 3); TestClass c3 = c1 + c2; c3.print(); }
Produktion:
Här är en skärmdump av koden:
Kodförklaring:
- Inkludera iostream-huvudfilen i vårt program för att kunna använda dess funktioner.
- Inkludera std-namnområdet i vårt program för att kunna använda dess klasser utan att anropa det.
- Skapa en klass som heter TestClass. { markerar början av klasskroppen.
- Använd modifieraren för privat åtkomst för att markera variabler som privata, vilket innebär att de bara kan nås från klassen.
- Definiera två heltalsvariabler, reella och över.
- Använd public access-modifieraren för att markera konstruktorn som offentlig, vilket innebär att den kommer att vara tillgänglig även utanför klassen.
- Skapar klasskonstruktorn och initierar variabler.
- Initiera värdet på variabeln real.
- Initiera värdet på variabeln över.
- Slutet på konstruktorkroppen.
- Åsidosätt innebörden av operatorn +.
- Skapa datatypresultatet av typen TestClass.
- Använd operatorn + med komplexa tal. Denna rad lägger till den reella delen av ett tal till den reella delen av ett annat tal.
- Använd operatorn + med komplexa tal. Denna linje kommer att lägga till den imaginära delen av ett tal till den imaginära delen av ett annat tal.
- Programmet kommer att returnera värdet på variabelresultatet vid framgångsrik exekvering.
- Slutet på definitionen av den nya betydelsen av + operatör, det vill säga överbelastning.
- Anropa metoden print().
- Skriv ut det nya komplexa numret efter tillägg på konsolen.
- Slutet på body of print()-funktionen.
- Slutet på kroppen av TestClass Class.
- Anropar funktionen main().
- Passar värdena för både verkliga och komplexa delar som ska läggas till. Den första delen av c1 kommer att läggas till den första delen av c2, det vill säga 9+4. Den andra delen av c1 kommer att läggas till den andra delen av c, det vill säga 5+3.
- Utföra en operation med operatorn överbelastad + och lagra resultatet i variabel c3.
- Skriver ut värdet för variabel c3 på konsolen.
- Slutet på huvuddelen av funktionen main().
Sammanfattning
- Du kan ange mer än en betydelse för en C++ Operatören i ett omfång.
- Detta kallas för operatörsöverbelastning.
- Operator överbelastning ger en speciell betydelse av en operatör för en användardefinierad datatyp.
- Du kan omdefiniera majoriteten av C++ operatörer genom operatörsöverbelastning.
- Inte alla C++ operatörer kan överbelastas.
- För att en operatör ska överbelastas måste minst en av operanderna vara ett användardefinierat objekt.
- Endast befintliga operatörer kan överbelastas. Du kan inte överbelasta nya operatörer.