Hoe operator overbelasting te implementeren in c ++?



In dit artikel zullen we kijken naar een ander objectgeoriënteerd concept dat de bediening door de operator eenvoudig maakt. We zouden Operator Overloading leren in C ++.

In dit artikel zullen we nog een ander objectgeoriënteerd concept onderzoeken dat de bediening door de operator eenvoudig maakt. Dat wil zeggen dat we in de details van Operator zouden komen Overbelasting in C ++ . De volgende tips komen in dit artikel aan bod:

Laten we dus aan de slag gaan met dit artikel over operatoroverbelasting in C ++.





Overbelasting in C ++

Als we twee of meer leden van dezelfde klasse maken met dezelfde naam maar verschillend in aantal of type parameter, staat dit bekend als C ++ overbelasting.



In C ++ kunnen we overbelasten:

  • methoden
  • constructeurs
  • geïndexeerde eigenschappen

Het is omdat deze leden alleen parameters hebben.

Verderop met dit artikel over operatoroverbelasting in C ++.



Soorten overbelasting in C ++

  • Functie overbelast
  • Operator overbelast

Overbelasting - Overbelasting door operator in C ++ - Edureka

Verderop met dit artikel over operatoroverbelasting in C ++.

Waarom wordt overbelasting door de operator gebruikt?

C ++ -programma's kunnen worden geschreven zonder de kennis van overbelasting door de operator. Ook dan wordt de bediening door de operator diepgaand gebruikt door programmeurs om het programma intuïtief te maken. Bijvoorbeeld,

We kunnen de code vervangen zoals:

berekening = optellen (delen (a, b), vermenigvuldigen (a, b))

Ter vergelijking

string to date conversie in java

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

Overbelasting van operators biedt een eenvoudige en gemakkelijke manier voor de ontwikkeling van nieuwe definities voor de meeste operators in C ++. Met voldoende kennis kunnen we bijna een eigen nieuwe taal creëren door creatief gebruik te maken van de functie en overbelastingstechnieken van de operator. We kunnen alle operators in C ++ overbelasten, behalve de volgende:
● Bereikoperator (: :)
● Maatoperator (Sizeof)
● ledenkiezer (.)
● lidaanwijzerselector (*)
● ternaire operator (? :)

Syntaxis van overbelasting door operator

sorteer bibliotheek c ++
return_type class_name:: operator op (argument_list) {// functie body}

Waar het retourtype het type waarde is dat door de functie wordt geretourneerd. class_name is de naam van de klas.

Verderop met dit artikel over operatoroverbelasting in C ++.

Operator Overloading implementeren in C ++

Operatorfunctie moet niet-statisch zijn (lidfunctie) of vriendfunctie om overbelast te raken. De overbelastingsfunctie van de operator kan worden toegepast op een lidfunctie als de linker operand een object van die klasse is, maar als de linker operand anders is, dan moet de overbelastingsfunctie van de operator gedefinieerd worden als een niet-lidfunctie.
De overbelastingsfunctie van de operator kan vriendfunctie worden gemaakt als dit toegang vereist tot de privé- en beschermde leden van de klas. De operator op is bijvoorbeeld een operatorfunctie waarbij op de operator is die wordt overbelast, en de operator het sleutelwoord. Overbelasting van de operator kan worden bereikt door een functie te implementeren die zowel lidfunctie, niet-lidfunctie of vriendfunctie kan zijn.

Wat is het verschil tussen operatorfuncties en normale functies?

Operatorfuncties zijn hetzelfde als normale functies. Het enige verschil is dat de naam van een operatorfunctie altijd het operator-trefwoord is gevolgd door het symbool van de operator en operatorfuncties worden aangeroepen wanneer de overeenkomstige operator wordt gebruikt.

Verderop met dit artikel over operatoroverbelasting in C ++.

Soorten overbelastingsbenaderingen

Overbelasting door de machinist kan worden gedaan door drie benaderingen te gebruiken, dat zijn ze

  • Overbelasting unaire operator.
  • Overbelaste binaire operator.
  • Overbelasting van binaire operator met behulp van een vriendfunctie.

Verderop met dit artikel over operatoroverbelasting in C ++.

Overbelasting Unary Operator

Laten we eens kijken naar de unaire ‘-‘ operator. Een min-operator wanneer deze als een unaire wordt gebruikt, heeft slechts één operand nodig. We weten dat deze operator het teken van een operand verandert wanneer hij wordt toegepast op een basisgegevensvariabele. Laten we eens kijken hoe we deze operator kunnen overbelasten, zodat deze op vrijwel dezelfde manier op een object kan worden toegepast als op een variabele int of float. De unaire minus, toegepast op een object, zou elk van zijn data-items moeten verlagen.

Voorbeeld:

#include using namespace std class Height {public: // Member Objects int feet, inch // Constructor om de waarde van het object te initialiseren Hoogte (int f, int i) {feet = f inch = i} // Overloading (-) operator to voer verlaging uit // bewerking van de operator Hoogte object leegte- () {feet-- inch-- cout<< 'Feet & Inches after decrement: ' << feet << ' ' ' << inch <

Uitgang:

Uitleg:
In het bovenstaande voorbeeld overbelasten we de unaire operator ‘-’ om de twee variabelen van de klasse Hoogte te verlagen. We geven twee parameters door aan de constructor en slaan hun waarden op in de variabele voeten en inch. Vervolgens definiëren we de overbelastingsfunctie van de operator (void operator- ()
) waarin de twee variabelen met één positie worden verlaagd.
Wanneer we -h1 schrijven, roept het de overbelastingsfunctie van de operator op en verlaagt het de waarden die aan de constructor worden doorgegeven.

Verderop met dit artikel over operatoroverbelasting in C ++.

Overbelaste binaire operator

Het is een overbelasting van een operator die op twee operanden werkt. Laten we hetzelfde voorbeeld nemen van de klasse Hoogte, maar deze keer twee Hoogte-objecten h1 en h2 toevoegen.

hoe double naar int te converteren

Voorbeeld:

#include using namespace std class Hoogte {public: int feet, inch Hoogte () {feet = 0 inch = 0} Hoogte (int f, int i) {feet = f inch = i} // Overbelasting (+) operator om uit te voeren toevoeging van // object met twee afstanden met behulp van binaire operator Hoogte operator + (Hoogte & d2) // Aanroep door verwijzing {// Maak een object om terug te geven Hoogte h3 // Voer de toevoeging van voeten en inches uit h3.feet = voet + d2.feet h3. inch = inch + d2.inch // Retourneer het resulterende object retour h3}} int main () {Hoogte h1 (3, 7) Hoogte h2 (6, 1) Hoogte h3 // Gebruik overbelaste operator h3 = h1 + h2 cout<< 'Sum of Feet & Inches: ' << h3.feet << ''' << h3.inch << endl return 0 } 

Uitgang:

Uitleg:
Hoogte operator + (Hoogte & h2), hier retourneert_type van functie is klasse Hoogte, dus het retourneert een object h3 van klasse Hoogte. In de regel h3 = h1 + h2 roept h1 de operatorfunctie van zijn klassenobjecten op en neemt h2 als parameter, dan passen we h3.feet = feet + d2.feet en h3.inch = inch + d2.inch toe die de som van de waarden van de variabelen feet en inch in variabelen die zijn gekoppeld aan het h3-object.
Wanneer de instructie ‘h3 = h1 + h2’ de overbelaste functie van de operator aanroept, nam het object h1 de verantwoordelijkheid voor het aanroepen van de functie en speelt h2 de rol van argument dat aan de functie wordt doorgegeven. De bovenstaande aanroepinstructie is equivalent aan h3 = h1.operator + (h2), dus het gegevenslid van h2 wordt rechtstreeks benaderd en het gegevenslid van h2 (dat als argument wordt doorgegeven) wordt benaderd met behulp van de puntoperator.

Regels voor overbelasting door operator

  • Alleen de bestaande operators kunnen worden overbelast en nieuwe operators kunnen niet worden overbelast
  • De overbelaste operator moet ten minste één operand van het door de gebruiker gedefinieerde gegevenstype bevatten.
  • We gebruiken geen vriendenfunctie om bepaalde operators te overbelasten. De lidfuncties kunnen echter worden gebruikt om die operators te overbelasten.
  • Wanneer unaire operatoren worden overbelast door een lidfunctie, nemen ze geen expliciete argumenten aan, maar als ze worden overbelast door een vriendfunctie, nemen ze één argument aan.
  • Wanneer binaire operatoren worden overbelast door een lidfunctie, nemen ze één expliciet argument aan, en als ze overbelast worden door een vriendfunctie, nemen ze twee expliciete argumenten.

Zo zijn we aan het einde gekomen van dit artikel over ‘Overbelasting van operators in C ++’. Als je meer wilt weten, bekijk dan de Java Training van Edureka, een vertrouwd online leerbedrijf. Edureka's cursussen zijn ontworpen om u te trainen voor zowel kern- als geavanceerde Java-concepten, samen met verschillende Java-frameworks zoals Hibernate & Spring.

Heeft u een vraag voor ons? Vermeld het in het opmerkingengedeelte van deze blog en we nemen zo snel mogelijk contact met je op.