Sådan implementeres overbelastning af operatører i c ++?



I denne artikel vil vi se på et andet objektorienteret koncept, der gør operatørhåndtering let. Vi lærer operatøroverbelastning i C ++.

I denne artikel vil vi undersøge endnu et objektorienteret koncept, der gør det let at håndtere operatører. Det er, vi ville komme ind i detaljerne om operatøren Overbelastning i C ++ . Følgende punkter vil blive dækket i denne artikel,

Så lad os komme i gang med denne artikel om operatøroverbelastning i C ++.





Overbelastning i C ++

hvordan man undgår blokeringer i java

Hvis vi opretter to eller flere medlemmer af samme klasse med samme navn, men forskellige i antal eller type parameter, er det kendt som C ++ overbelastning.



I C ++ kan vi overbelaste:

  • metoder
  • konstruktører
  • indekserede egenskaber

Det er fordi disse medlemmer kun har parametre.

Fortsætter med denne artikel om operatøroverbelastning i C ++.



Typer af overbelastning i C ++

  • Funktion overbelastning
  • Operatør overbelastning

Overbelastning - Operatør Overbelastning I C ++ - Edureka

Fortsætter med denne artikel om operatøroverbelastning i C ++.

Hvorfor bruges operatøroverbelastning?

C ++ - programmer kan skrives uden kendskab til operatørens overbelastning. Derefter bruges operatørens drift dybt af programmerere til at gøre programmet intuitivt. For eksempel,

Vi kan erstatte koden som:

beregning = tilføj (divider (a, b), gang (a, b))

For ligning

beregning = (a / b) + (a * b)

Operatøroverbelastning giver en enkel og nem måde til udvikling af nye definitioner for de fleste operatører i C ++. Med tilstrækkelig viden kan vi næsten skabe et nyt sprog ved hjælp af den kreative brug af funktion og operatørens overbelastningsteknikker. Vi kan overbelaste alle operatørerne i C ++ undtagen følgende:
● Omfangsoperatør (: :)
● Størrelsesoperator (Sizeof)
● medlemsvælger (.)
● medlemsvælgervælger (*)
● ternær operatør (? :)

Syntaks for operatøroverbelastning

hvad gør .innerhtml
return_type class_name:: operator op (argument_list) {// function body}

Hvor returtypen er typen af ​​værdi, der returneres af funktionen. class_name er navnet på klassen.

Fortsætter med denne artikel om operatøroverbelastning i C ++.

Implementering af operatøroverbelastning i C ++

Operatørfunktionen skal være enten ikke-statisk (medlemsfunktion) eller venfunktion for at blive overbelastet. Operatøroverbelastningsfunktion kan anvendes på en medlemsfunktion, hvis den venstre operand er et objekt i denne klasse, men hvis den venstre operand er anderledes, skal operatøroverbelastningsfunktionen defineres som en funktion, der ikke er medlem.
Operatøroverbelastningsfunktion kan gøres til en venfunktion, hvis den kræver adgang til de private og beskyttede medlemmer af klassen. Eksempelvis er operatøren op en operatørfunktion, hvor op er operatøren, der overbelastes, og operatøren er nøgleordet. Operatøroverbelastning kan opnås ved at implementere en funktion, der kan være enten medlemsfunktion, ikke-medlemsfunktion eller venfunktion.

Hvad er forskellen mellem operatørfunktioner og normale funktioner?

Operatørfunktioner er de samme som normale funktioner. Den eneste forskel er, at navnet på en operatorfunktion altid er operator-nøgleord efterfulgt af symbolet for operator, og operatørfunktioner kaldes, når den tilsvarende operator bruges.

Fortsætter med denne artikel om operatøroverbelastning i C ++.

Typer af overbelastningsmetoder

Operatøroverbelastning kan udføres ved at bruge tre tilgange, de er

  • Overbelastning af unary operatør.
  • Overbelastning af binær operatør.
  • Overbelastning af binær operatør ved hjælp af en venfunktion.

Fortsætter med denne artikel om operatøroverbelastning i C ++.

Overbelastning af unary operatør

Lad os overveje den unære '-' operatør. En minusoperator, når den bruges som unary, kræver den kun en operand. Vi ved, at denne operatør ændrer tegnet på en operand, når den anvendes på en basisdatavariabel. Lad os se, hvordan man overbelaster denne operatør, så den kan anvendes på et objekt på stort set samme måde som det anvendes på en int- eller float-variabel. Det unære minus, når det anvendes på et objekt, skal mindske hvert af dets dataposter.

Eksempel:

#include ved hjælp af namespace std klasse Højde {offentlig: // Medlem Objekter int fødder, tomme // Konstruktør til at initialisere objektets værdi Højde (int f, int i) {fod = f tomme = i} // Overbelastning (-) operator til udfør dekrement // operation af Højde-objekt ugyldig operator- () {fod - tomme - cout<< 'Feet & Inches after decrement: ' << feet << ' ' ' << inch <

Produktion:

Forklaring:
I ovenstående eksempel overbelaster vi '-' unary operator til at udføre dekrement i de to variabler i højdeklassen. Vi videregiver to parametre til konstruktøren og gemmer deres værdier i fod og tomme variabel. Derefter definerer vi operatorens overbelastningsfunktion (ugyldig operator- ()
) hvor de to variabler reduceres med en position.
Når vi skriver -h1, kalder det operatørens overbelastningsfunktion og reducerer de værdier, der sendes til konstruktøren.

Fortsætter med denne artikel om operatøroverbelastning i C ++.

Overbelastning af binær operatør

Det er en overbelastning af en operatør, der opererer på to operander. Lad os tage det samme eksempel på klasse Højde, men denne gang tilføj to højdeobjekter h1 og h2.

Eksempel:

# inkludere brug af navneområde std klasse Højde {offentlig: int fødder, tomme Højde () {fod = 0 tomme = 0} Højde (int f, int i) {fod = f tomme = i} // Overbelastning (+) operatør til at udføre tilføjelse // to afstandsobjekt ved hjælp af binær operator Højdeoperator + (Højde & d2) // Opkald med reference {// Opret et objekt for at returnere Højde h3 // Udfør tilføjelse af fødder og tommer h3.feet = feet + d2.feet h3. tomme = tomme + d2.inch // Returner det resulterende objektretur h3}} int main () {Højde h1 (3, 7) Højde h2 (6, 1) Højde h3 // Brug overbelastet operatør h3 = h1 + h2 cout<< 'Sum of Feet & Inches: ' << h3.feet << ''' << h3.inch << endl return 0 } 

Produktion:

Forklaring:
Højdeoperator + (Højde & h2), her returnerer_type af funktion er klasse Højde, så den returnerer et objekt h3 af klasse Højde. I linjen h3 = h1 + h2 kalder h1 operatørfunktionen for sine klasserobjekter og tager h2 som parameter, så anvender vi h3.feet = feet + d2.feet og h3.inch = inch + d2.inch som gemmer summen af ​​værdierne for variablerne feet og inch i variabler, der er knyttet til h3-objektet.
Når udsagnet 'h3 = h1 + h2' påkalder operatørens overbelastede funktion, tog objektet h1 ansvaret for at påkalde funktionen, og h2 spiller den rolle, som argumentet sendes til funktionen. Ovenstående påkaldssætning er ækvivalent med h3 = h1.operator + (h2), der er adgang til dataelementet til h2 direkte, og datalementet til h2 (der sendes som et argument) er adgang til ved hjælp af prikoperatoren.

flet sorteringsprogram i java

Regler for overbelastning af operatører

  • Kun de eksisterende operatører kan overbelastes, og nye operatører kan ikke overbelastes
  • Den overbelastede operatør skal indeholde mindst en operand af den brugerdefinerede datatype.
  • Vi bruger ikke en venfunktion til at overbelaste visse operatører. Dog kan medlemsfunktionerne bruges til at overbelaste disse operatører.
  • Når unære operatører er overbelastede gennem en medlemsfunktion, tager de ingen eksplicitte argumenter, men hvis de er overbelastede af en venfunktion, tager de et argument.
  • Når binære operatører er overbelastet gennem en medlemsfunktion, tager de et eksplicit argument, og hvis de er overbelastet gennem en venfunktion, tager de to eksplicitte argumenter.

Således er vi nået til slutningen af ​​denne artikel om 'Operator Overloading in C ++'. Hvis du ønsker at lære mere, skal du tjekke Java Training af Edureka, et betroet online læringsfirma. Edureka's Kurset er designet til at træne dig til både kerne- og avancerede Java-koncepter sammen med forskellige Java-rammer som Hibernate & Spring.

Har du et spørgsmål til os? Nævn det i kommentarsektionen på denne blog, og vi vender tilbage til dig hurtigst muligt.