Vad är operatörens överbelastning?
Med operatörsöverbelastning i C ++ kan du ange mer än en betydelse för en operatör i ett omfång. Syftet med operatörens överbelastning är att ge en operatör en speciell betydelse för en användardefinierad datatyp.
Med hjälp av operatörsöverbelastning kan du omdefiniera majoriteten av C ++ - operatörerna. Du kan också använda överbelastning av operatören för att utföra olika operationer med en operatör.
I denna C ++ -handledning lär du dig:
- Vad är operatörens överbelastning?
- Syntax
- Olika metoder för överbelastning av operatörer i C ++
- Kan alla C ++ -operatörer överbelastas?
- Saker att komma ihåg:
- Regler för överbelastning av operatörer:
- Hur överbelastar operatören:
Syntax
För att överbelasta en C ++ -operatör bör du definiera en speciell funktion i klassen enligt följande:
class class_name{… publicreturn_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 operatörens nyckelord.
- Symbolen betecknar operatörssymbolen som ska överbelastas. Till exempel +, -, <, ++.
- Argumenten kan skickas till operatörsfunktionen på samma sätt som funktioner.
Exempel 1:
#includeusing 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:
- Inkluderar iostream-huvudfilen i vår kod för att använda dess funktioner.
- Inkludera std-namnområdet i vårt program för att använda sina klasser utan att kalla det.
- Skapa en klass med namnet TestClass.
- Använd modifieraren för privat åtkomst, som markerar en klassmedlem som privat tillgänglig.
- Skapa ett heltal variabelantal. Denna variabel kommer att vara privat tillgänglig.
- Använd modifieraren för allmän tillgång, som markerar en klassmedlem som privat tillgänglig.
- Använd en klasskonstruktör för att initiera variabelräknaren till 5.
- Överbelasta innebörden av operatören.
- Operatören minskar värdet på variabeln x med 1.
- Slutet på operatörens överbelastningssektion. Operatören har fått ett nytt namn.
- Definiera en funktion med namnet Display () -funktion.
- Skriv ut värdet för variabelantal tillsammans med annan text på konsolen när Display () -funktionen anropas. } Markerar slutet på displayfunktionen ().
- Slutet på klassens kropp.
- Ring huvudfunktionen (). Programlogiken bör läggas till inom denna funktion.
- Skapa en instans av klassen TestClass och ge den namnet tc.
- Detta kommer att anropa tomrumsoperatören - () -funktionen.
- Använd hållningen i TestClass Class för att ringa till Display () -funktionen.
- Funktionen måste returnera värde när den har slutförts.
- Slutet på huvudfunktionens huvud ().
Olika metoder för överbelastning av operatörer i C ++
Du kan utföra överbelastning av operatören genom att implementera någon av följande typer av funktioner:
- Medlem Funktion
- Icke-medlem-funktion
- Vänfunktion
- Funktionen för överbelastning av operatören kan vara en medlemsfunktion när en vänster operand är ett objekt i klassen.
- När vänster operand är annorlunda, bör överbelastningsfunktionen för operatören vara en icke-medlem-funktion.
Du kan göra operatörens överbelastningsfunktion till en vänfunktion om den behöver komma åt privata och skyddade klassmedlemmar.
Kan alla C ++ -operatörer överbelastas?
Nej. Det finns C ++ -operatörer som inte kan överbelastas.
De inkluderar:
- :: -Opplösningsoperatör
- ?: -interna operatören.
- . -medlemsväljare
- Operatörens storlek
- * -medlempekerväljare
Saker att komma ihåg:
- Med operatörsöverbelastning kan du omdefiniera hur en operatör endast fungerar 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örerna är överbelastade som standard. Du kan till exempel kopiera objekten i samma klass direkt med operatorn =.
- Operatörens företräde ändrar inte operatörernas associativa och företräde. Du kan dock ändra utvärderingsordningen med parentes.
- Det finns fyra operatörer som du inte kan överbelasta i C ++. De inkluderar omfångsupplösningsoperatören (: :), operatör för medlemsval (.), Medlemsval genom en pekare till funktionsoperator (. *) Och den ternära operatören (? :).
Regler för överbelastning av operatörer:
Här är regler för operatörsö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 överbelastar operatören:
Exempel 1:
#includeusing 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:
- Inkluderar iostream-huvudfilen i vår kod för att använda dess funktioner.
- Inkludera std-namnområdet i vårt program för att använda sina klasser utan att kalla 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 allmän tillgång, som markerar en klassmedlem som privat tillgänglig.
- Använd en klasskonstruktör för att initiera variabeln x till 10.
- Överbelasta innebörden av ++ -operatören.
- Operatören ökar värdet på variabeln x med 2.
- Slutet på operatörens överbelastningssektion. Operatören har fått ett nytt namn.
- Ringa utskriftsfunktionen ().
- Skriv ut värdet på variabeln x tillsammans med annan text på konsolen när Print () -funktionen anropas.
- Slutet på kroppen för funktionen Print ().
- Slutet på klassens kropp.
- Ring huvudfunktionen (). Programlogiken bör läggas till inom denna funktion.
- Skapa en instans av OperatorOverload-klassen med namnet ov.
- Detta kommer att anropa tomrumsoperatören ++ () -funktionen.
- Använd hållningen till klassen OperatorOverload för att ringa funktionen Print ().
- Funktionen måste returnera värde när den har slutförts.
- Slutet på huvudfunktionens huvud ().
Exempel 2:
#includeusing 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:
- Inkluderar 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 sina klasser utan att kalla det.
- Skapa en klass med namnet TestClass. {Markerar början på klassens kropp.
- Använd modifieraren för privat åtkomst för att markera variabler som privata, vilket innebär att de endast kan nås från klassen.
- Definiera två heltal variabler, verkliga och över.
- Använd modifieraren för allmän tillgång för att markera konstruktören som allmän, vilket innebär att den kommer att vara tillgänglig även utanför klassen.
- Skapa klasskonstruktören och initiera variablerna.
- Initiera värdet på variabel real.
- Initiera värdet på variabeln över.
- Slutet på konstruktörskroppen.
- Åsidosätt + operatörens innebörd.
- Skapa datatypresultatet av typen TestClass.
- Använd + -operatören med komplexa siffror. Denna rad lägger till den verkliga delen av ett nummer till den verkliga delen av ett annat nummer.
- Använd + -operatören med komplexa siffror. Denna rad lägger till den imaginära delen av ett nummer till den imaginära delen av ett annat nummer.
- Programmet returnerar värdet på det variabla resultatet när det genomförts.
- Slutet på definitionen av den nya innebörden av + -operatören, det vill säga överbelastning.
- Ring utskriftsmetoden ().
- Skriv ut det nya komplexa numret efter tillägget på konsolen.
- Slut på funktionen för utskrift ().
- Slutet på kroppen i TestClass-klass.
- Ringer till huvudfunktionen ().
- Skicka värdena för både verkliga och komplexa delar som ska läggas till. Den första delen av c1 läggs till den första delen av c2, det vill säga 9 + 4. Den andra delen av c1 läggs till den andra delen av c, det vill säga 5 + 3.
- Utföra en operation med den överbelastade + -operatören och lagra resultatet i variabeln c3.
- Skriva ut värdet på variabeln c3 på konsolen.
- Slutet på huvudfunktionen ().
Sammanfattning:
- Du kan ange mer än en mening för en C ++ - operatör i ett omfång.
- Detta kallas operatörsöverbelastning.
- Operatörsöverbelastning ger en speciell betydelse för 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 bli överbelastad måste minst en av operanderna vara ett användardefinierat objekt.
- Endast befintliga operatörer kan överbelastas. Du kan inte överbelasta nya operatörer.