Hur implementerar jag föraröverbelastning i c ++?



I den här artikeln kommer vi att titta på ett annat objektorienterat koncept som gör operatörshantering lätt. Vi skulle lära oss Operator Overloading i C ++.

I den här artikeln kommer vi att utforska ännu ett objektorienterat koncept som gör operatörshantering lätt. Det är att vi skulle komma in i detaljerna om operatören Överbelastning i C ++ . Följande tips kommer att behandlas i den här artikeln,

skillnaden mellan final slutligen och finalisera

Så låt oss komma igång med den här artikeln om överbelastning av operatörer i C ++.





Överbelastning i C ++

Om vi ​​skapar två eller flera medlemmar av samma klass med samma namn men olika i antal eller typ av parameter, är det känt som C ++ överbelastning.



I C ++ kan vi överbelasta:

  • metoder
  • konstruktörer
  • indexerade egenskaper

Det beror på att dessa medlemmar endast har parametrar.

Gå vidare med den här artikeln om överbelastning av operatörer i C ++.



Typer av överbelastning i C ++

  • Funktionsöverbelastning
  • Överbelastning av operatören

Överbelastning - Överbelastning av operatör I C ++ - Edureka

Gå vidare med den här artikeln om överbelastning av operatörer i C ++.

Varför används överbelastning av operatören?

C ++ - program kan skrivas utan kunskap om operatörens överbelastning. Då används också operatörsdrift mycket av programmerare för att göra programmet intuitivt. Till exempel,

Vi kan ersätta koden som:

beräkning = lägg till (dela (a, b), multiplicera (a, b))

För ekvation

beräkning = (a / b) + (a * b)

Överbelastning av operatörer ger ett enkelt och enkelt sätt att utveckla nya definitioner för de flesta operatörer i C ++. Med tillräcklig kunskap kan vi nästan skapa ett eget eget språk genom kreativ användning av funktion och operatörsöverbelastningstekniker. Vi kan överbelasta alla operatörer i C ++ utom följande:
● Omfattningsoperatör (: :)
● Storleksoperatör (Sizeof)
● medlemsväljare (.)
● medlemspekerväljare (*)
● ternär operatör (? :)

Syntax för operatörsöverbelastning

return_type class_name:: operator op (argument_list) {// function body}

Där returtypen är den typ av värde som returneras av funktionen. klassnamn är klassens namn.

Gå vidare med den här artikeln om överbelastning av operatörer i C ++.

Implementering av operatörsöverbelastning i C ++

Operatörsfunktionen måste vara antingen icke-statisk (medlemsfunktion) eller vänfunktion för att bli överbelastad. Operatörsöverbelastningsfunktion kan tillämpas på en medlemsfunktion om vänster operand är ett objekt i den klassen, men om vänster operand är annorlunda måste operatörens överbelastningsfunktion definieras som en icke-medlem-funktion.
Operatörens överbelastningsfunktion kan göras till en vänfunktion om den kräver åtkomst till de privata och skyddade medlemmarna i klassen. Exempelvis är operatören op en operatörsfunktion där op är operatören som överbelastas, och operatören är nyckelordet. Överbelastning av operatörer kan uppnås genom att implementera en funktion som kan vara antingen medlemsfunktion, icke-medlemsfunktion eller vänfunktion.

Vad är skillnaden mellan operatörsfunktioner och normala funktioner?

Operatörsfunktioner är desamma som normala funktioner. Den enda skillnaden är att namnet på en operatörsfunktion alltid är operatörens nyckelord följt av symbolen för operatör och operatörsfunktioner anropas när motsvarande operatör används.

Gå vidare med den här artikeln om överbelastning av operatörer i C ++.

Typer av överbelastningsmetoder

Överbelastning av operatörer kan göras med tre metoder, de är

  • Överbelastning av unary operatör.
  • Överbelastning av binär operatör.
  • Överbelastning av binär operatör med hjälp av en vänfunktion.

Gå vidare med den här artikeln om överbelastning av operatörer i C ++.

Överbelastning av unary operatör

Låt oss överväga den unary '-' operatören. En minusoperator när den används som unary kräver den bara en operand. Vi vet att den här operatören ändrar tecknet på en operand när den tillämpas på en basdatavariabel. Låt oss se hur man överbelastar den här operatören så att den kan appliceras på ett objekt på ungefär samma sätt som den tillämpas på en int- eller float-variabel. Det unara minus, när det tillämpas på ett objekt, bör minska var och en av dess dataposter.

Exempel:

#include using namespace std class Height {public: // Member Objects int feet, inch // Constructor to initialize the object's value Height (int f, int i) {feet = f inch = i} // Overloading (-) operator to utför minskning // operation av höjdobjektet ogiltig operatör- () {fot-- tum-- cout<< 'Feet & Inches after decrement: ' << feet << ' ' ' << inch <

Produktion:

Förklaring:
I exemplet ovan överbelastar vi '-' unary operator för att utföra minskning i de två variablerna i höjdklassen. Vi skickar två parametrar till konstruktören och sparar deras värden i fot och tum variabel. Sedan definierar vi operatörens överbelastningsfunktion (void operator- ()
) där de två variablerna minskas med en position.
När vi skriver -h1 kallar det operatörens överbelastningsfunktion och minskar de värden som skickas till konstruktören.

Gå vidare med den här artikeln om överbelastning av operatörer i C ++.

Överbelastning av binär operatör

Det är en överbelastning av en operatör som arbetar på två operander. Låt oss ta samma exempel på klass Höjd, men den här gången, lägg till två höjdobjekt h1 och h2.

Exempel:

#include using namespace std class Height {public: int feet, inch Height () {feet = 0 inch = 0} Height (int f, int i) {feet = f inch = i} // Överbelastning (+) operatör att utföra tillägg av // två avståndsobjekt med binäroperatör Höjdoperator + (Höjd & d2) // Ring genom referens {// Skapa ett objekt för att returnera Höjd h3 // Utför tillägg av fötter och tum h3.feet = feet + d2.feet h3. tum = tum + d2.inch // Returnera det resulterande objektet retur h3}} int main () {Höjd h1 (3, 7) Höjd h2 (6, 1) Höjd h3 // Använd överbelastad operatör h3 = h1 + h2 cout<< 'Sum of Feet & Inches: ' << h3.feet << ''' << h3.inch << endl return 0 } 

Produktion:

Förklaring:
Höjdoperator + (Höjd & h2), här returnerar_typ av funktion är klass Höjd, vilket returnerar ett objekt h3 av klass Höjd. På raden h3 = h1 + h2 kallar h1 operatörsfunktionen för sina klassobjekt och tar h2 som parameter, sedan applicerar vi h3.feet = feet + d2.feet och h3.inch = inch + d2.inch som lagrar summan av värdena för variablerna fot och tum i variabler associerade med h3-objektet.
När uttalandet 'h3 = h1 + h2' åberopar operatörens överbelastade funktion tog objektet h1 ansvaret för att anropa funktionen och h2 spelar den roll som argument som skickas till funktionen. Ovanstående anropsuttalande är ekvivalent med h3 = h1.operator + (h2), därför kommer åtkomst till datamedlemmen i h2 direkt och dataledaren för h2 (som skickas som ett argument) nås med hjälp av punktoperatören.

Regler för operatörsöverbelastning

  • Endast befintliga operatörer kan överbelastas och nya operatörer kan inte överbelastas
  • Den överbelastade operatören måste innehålla minst en operand av den användardefinierade datatypen.
  • Vi använder inte en vänfunktion för att överbelasta vissa operatörer. Dock kan medlemsfunktionerna användas för att överbelasta dessa operatörer.
  • När unary operatörer överbelastas genom en medlemsfunktion tar de inga uttryckliga argument, men om de överbelastas av en vänfunktion tar de ett argument.
  • När binära operatörer är överbelastade genom en medlemsfunktion tar de ett uttryckligt argument, och om de överbelastas genom en vänfunktion tar de två uttryckliga argument.

Således har vi kommit till ett slut på den här artikeln om ”Operator Overloading in C ++”. Om du vill lära dig mer, kolla in Java Training av Edureka, ett pålitligt online-lärande företag. Edureka's kursen är utformad för att träna dig för både kärn- och avancerade Java-koncept tillsammans med olika Java-ramverk som Hibernate & Spring.

Har du en fråga till oss? Vänligen nämna det i kommentarsektionen på den här bloggen så kommer vi tillbaka till dig så snart som möjligt.