C++ Operator Overladen met voorbeelden
Wat is Operaof Overbelasting?
gebruik operator overbelast in C++, kunt u meer dan één betekenis voor een operator in één scope opgeven. Het doel van operatoroverloading is om een speciale betekenis van een operator te bieden voor een door de gebruiker gedefinieerd gegevenstype.
Met behulp van operatoroverbelasting kunt u het merendeel van de C++ operators. U kunt ook operatoroverloading gebruiken om verschillende bewerkingen uit te voeren met één operator.
Syntaxis
Om een C++ operator, moet u een speciale functie binnen de klasse definiëren als volgt:
class class_name { ... .. ... public return_type operator symbol (argument(s)) { ... .. ... } ... .. ... };
Hier is een verklaring voor de bovenstaande syntaxis:
- Het return_type is het retourtype voor de functie.
- Vervolgens vermeldt u het trefwoord operator.
- Het symbool geeft het operatorsymbool aan dat overbelast moet worden. Bijvoorbeeld +, -, <, ++.
- De argumenten kunnen op dezelfde manier als functies aan de operatorfunctie worden doorgegeven.
Voorbeeld 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; }
Output:
Hier is een screenshot van de code:
Code Verklaring:
- Het iostream-headerbestand opnemen in onze code om de functies ervan te gebruiken.
- Neem de std-naamruimte op in ons programma om de klassen ervan te gebruiken zonder deze aan te roepen.
- Maak een klasse met de naam TestClass.
- Gebruik de privétoegangsmodifier, die een klaslid als privé toegankelijk markeert.
- Maak een geheel getalvariabeletelling. Deze variabele zal privé toegankelijk zijn.
- Gebruik de modifier voor openbare toegang, die een klaslid als privé toegankelijk markeert.
- Gebruik een klasseconstructor om de variabeleteller op 5 te initialiseren.
- Overbelast de betekenis van de — operator.
- De operator verlaagt de waarde van de variabele x met 1.
- Einde van de operator overloading sectie. De operator heeft een nieuwe naam gekregen.
- Een functie definiëren met de naam Display()-functie.
- Druk de waarde van het aantal variabelen af naast andere tekst op de console wanneer de functie Display() wordt aangeroepen. De } markeert het einde van de hoofdtekst van de functie Display().
- Einde van het klassenlichaam.
- Roep de functie main() aan. Binnen deze functie moet de programmalogica worden toegevoegd.
- Maak een instance van de klasse TestClass en geef deze de naam tc.
- Hiermee wordt de void operator –() functie aangeroepen.
- Gebruik de houding van TestClass Class om de functie Display() aan te roepen.
- De functie moet na succesvolle voltooiing een waarde retourneren.
- Einde van de hoofdtekst van de functie main().
Verschillende benaderingen van Operator Overbelasting in C++
U kunt operatoroverbelasting uitvoeren door een van de volgende typen functies te implementeren:
- Lid Functie
- Niet-ledenfunctie
- Vriend Functie
- De operatoroverbelastingsfunctie kan een lidfunctie zijn wanneer een linkeroperand een object van de klasse is.
- Als de linker operand anders is, OperaDe overbelastingsfunctie moet een niet-lidfunctie zijn.
U kunt de operatoroverbelastingsfunctie een vriendfunctie maken als deze toegang nodig heeft tot de privé- en beschermde klasseleden.
Kan allemaal C++ Operazijn ze overbelast?
Nee. Die zijn er C++ operatoren die niet overbelast kunnen worden.
Zij omvatten:
- :: -Bereik resolutie operator
- ?: -ternaire operator.
- . -ledenkiezer
- Grootte van de operator
- * -lidaanwijzerselector
Dingen om te onthouden
- Met operator overloading kunt u de manier waarop een operator werkt alleen opnieuw definiëren voor de door de gebruiker gedefinieerde typen (objecten, structuren). U kunt het niet gebruiken voor ingebouwde typen (float, char, int, enz.).
- De = en & C++ operators worden standaard overloaded. U kunt bijvoorbeeld de objecten van dezelfde Class direct kopiëren met de operator =.
- Operator precedence verandert de associatieve en precedence van operatoren niet. U kunt echter de volgorde van evaluatie wijzigen met behulp van haakjes.
- Er zijn vier operatoren die je niet kunt overbelasten in C++Deze omvatten de scope-resolutie-operator (::), de ledenselectie-operator (.), de ledenselectie via een aanwijzer naar de functie-operator (.*) en de ternaire operator (?:).
Regels voor Operavoor overbelasting
Hier zijn regels voor Operato Overbelasting:
- Om dit te laten werken, moet minstens één operand een door de gebruiker gedefinieerd klasseobject zijn.
- Je kunt alleen bestaande operatoren overladen. Je kunt geen nieuwe operatoren overladen.
- Sommige operatoren kunnen niet worden overladen met een vriendfunctie. Zulke operatoren kunnen echter wel worden overladen met een lidfunctie.
Hoe te overbelasten Operator
Voorbeeld 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; }
Output:
Hier is een screenshot van de code:
Code Verklaring:
- Het iostream-headerbestand opnemen in onze code om de functies ervan te gebruiken.
- Neem de std-naamruimte op in ons programma om de klassen ervan te gebruiken zonder deze aan te roepen.
- Maak een klasse met de naam OperatorOverbelasting.
- Gebruik de privétoegangsmodifier, die een klaslid als privé toegankelijk markeert.
- Maak een geheel getalvariabele x. Deze variabele zal privé toegankelijk zijn.
- Gebruik de modifier voor openbare toegang, die een klaslid als privé toegankelijk markeert.
- Gebruik een klasseconstructor om variabele x te initialiseren naar 10.
- Overbelast de betekenis van de ++ operator.
- De operator verhoogt de waarde van variabele x met 2.
- Einde van de operator overloading sectie. De operator heeft een nieuwe naam gekregen.
- De functie Print() aanroepen.
- Druk de waarde van variabele x af naast andere tekst op de console wanneer de functie Print() wordt aangeroepen.
- Einde van de hoofdtekst van de functie Print().
- Einde van het klassenlichaam.
- Roep de functie main() aan. Binnen deze functie moet de programmalogica worden toegevoegd.
- Maak een instantie van de OperatorOverload Klasse genaamd ov.
- Hiermee wordt de void operator ++()-functie aangeroepen.
- Gebruik de houding van OperatorOverload-klasse om de functie Print() aan te roepen.
- De functie moet na succesvolle voltooiing een waarde retourneren.
- Einde van de hoofdtekst van de functie main().
Voorbeeld 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(); }
Output:
Hier is een screenshot van de code:
Code Verklaring:
- Het iostream-headerbestand in ons programma opnemen om de functies ervan te gebruiken.
- Neem de std-naamruimte op in ons programma om de klassen ervan te gebruiken zonder deze aan te roepen.
- Maak een klasse met de naam TestClass. De { markeert het begin van de hoofdtekst van de klasse.
- Gebruik de privétoegangsmodifier om variabelen als privé te markeren, wat betekent dat ze alleen toegankelijk zijn vanuit de klasse.
- Definieer twee integer-variabelen, real en over.
- Gebruik de modifier voor openbare toegang om de constructor als openbaar te markeren, wat betekent dat deze zelfs buiten de klasse toegankelijk zal zijn.
- Het maken van de klassenconstructor en het initialiseren van de variabelen.
- Initialiseer de waarde van variabele real.
- Initialiseer de waarde van de variabele over.
- Einde van het constructorlichaam.
- De betekenis van de + operator negeren.
- Maak het gegevenstyperesultaat van het type TestClass.
- Gebruik de + operator met complexe getallen. Deze regel telt het reële deel van een getal op bij het reële deel van een ander getal.
- Gebruik de + operator met complexe getallen. Deze regel telt het imaginaire deel van een getal op bij het imaginaire deel van een ander getal.
- Het programma retourneert de waarde van het variabele resultaat bij succesvolle uitvoering.
- Einde van de definitie van de nieuwe betekenis van de + operator, namelijk overbelasting.
- Roep de methode print() aan.
- Druk het nieuwe complexe getal af na optelling op de console.
- Einde van de hoofdtekst van de functie print().
- Einde van de hoofdtekst van TestClass Class.
- De functie main() aanroepen.
- De waarden van zowel reële als complexe delen doorgeven die moeten worden opgeteld. Het eerste deel van c1 wordt opgeteld bij het eerste deel van c2, dat wil zeggen 9+4. Het tweede deel van c1 wordt opgeteld bij het tweede deel van c, dat wil zeggen 5+3.
- Een bewerking uitvoeren met de overbelaste + operator en het resultaat opslaan in variabele c3.
- Afdrukken van de waarde van variabele c3 op de console.
- Einde van de hoofdtekst van de functie main().
Samenvatting
- U kunt meer dan één betekenis voor a opgeven C++ operator in één bereik.
- Dit wordt operatoroverbelasting genoemd.
- OperaTor-overbelasting geeft een speciale betekenis aan een operator voor een door de gebruiker gedefinieerd gegevenstype.
- Je kunt het merendeel ervan opnieuw definiëren C++ operators door operatoroverbelasting.
- Niet alles C++ kunnen operators overbelast raken.
- Om een operator te overladen, moet minstens één van de operanden een door de gebruiker gedefinieerd object zijn.
- Alleen bestaande operatoren kunnen worden overladen. U kunt geen nieuwe operatoren overladen.