C ++ Operator Overloading met voorbeelden

Inhoudsopgave:

Anonim

Wat is overbelasting van de operator?

Als u operatoroverbelasting gebruikt in C ++, kunt u meer dan één betekenis voor een operator in één bereik specificeren. Het doel van overbelasting van een operator is om een ​​speciale betekenis van een operator te geven voor een door de gebruiker gedefinieerd gegevenstype.

Met behulp van overbelasting van operators kunt u de meeste C ++ operators opnieuw definiëren. U kunt ook operatoroverbelasting gebruiken om verschillende bewerkingen uit te voeren met één operator.

In deze C ++ tutorial leer je:

  • Wat is overbelasting van de operator?
  • Syntaxis
  • Verschillende benaderingen van overbelasting door operators in C ++
  • Kunnen alle C ++ - operators worden overbelast?
  • Dingen om te onthouden:
  • Regels voor overbelasting door operator:
  • Operator overbelasten:

Syntaxis

Om een ​​C ++ -operator te overbelasten, moet u als volgt een speciale functie binnen de klasse definiëren:

class class_name{… publicreturn_type operator symbol (argument(s)){… }… };

Hier is een uitleg voor de bovenstaande syntaxis:

  • Het return_type is het retourtype voor de functie.
  • Vervolgens noem je het operator-trefwoord.
  • Het symbool geeft het bedieningssymbool aan dat moet worden overbelast. Bijvoorbeeld +, -, <, ++.
  • De argument (en) kunnen op dezelfde manier als functies aan de operatorfunctie worden doorgegeven.

Voorbeeld 1:

#include 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;}

Uitgang:

Hier is een screenshot van de code:

Code Verklaring:

  1. Inclusief het iostream-headerbestand in onze code om de functies ervan te gebruiken.
  2. Neem de std-naamruimte op in ons programma om zijn klassen te gebruiken zonder deze op te roepen.
  3. Maak een klasse met de naam TestClass.
  4. Gebruik de privétoegangsmodificator, die een klaslid markeert als privé toegankelijk.
  5. Maak een geheel getal variabel aantal. Deze variabele is privé toegankelijk.
  6. Gebruik de modifier voor openbare toegang, die een klaslid markeert als privé toegankelijk.
  7. Gebruik een klassenconstructor om de variabele teller op 5 te initialiseren.
  8. Overbelast de betekenis van de - operator.
  9. De operator verlaagt de waarde van de variabele x met 1.
  10. Einde van het overbelastingsgedeelte van de operator. De operator heeft een nieuwe naam gekregen.
  11. Een functie definiëren met de naam Display () function.
  12. 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 ().
  13. Einde van de klas.
  14. Roep de functie main () aan. De programmalogica moet binnen deze functie worden toegevoegd.
  15. Maak een instantie van de klasse TestClass en geef deze de naam tc.
  16. Dit zal de ongeldige operator - () functie aanroepen.
  17. Gebruik het standpunt van TestClass Class om de functie Display () aan te roepen.
  18. De functie moet waarde retourneren na succesvolle voltooiing.
  19. Einde van de hoofdtekst van de functie main ().

Verschillende benaderingen van overbelasting door operators in C ++

U kunt de operator overbelasten door een van de volgende soorten functies te implementeren:

  1. Lid Functie
  2. Functie die geen lid is
  3. Vriendfunctie
  • De overbelastingsfunctie van de operator kan een lidfunctie zijn wanneer een linker operand een object van de klasse is.
  • Als de linker operand anders is, moet de overbelastingsfunctie van de operator een niet-lidfunctie zijn.

U kunt van de overbelastingsfunctie van de operator een vriendfunctie maken als deze toegang moet hebben tot de privé- en beschermde klasleden.

Kunnen alle C ++ - operators worden overbelast?

Nee. Er zijn C ++ operators die niet kunnen worden overbelast.

Ze bevatten:

  • :: -Scope resolutie operator
  • ?: -ternaire operator.
  • ​ -lid selector
  • Grootte van operator
  • * -member pointer selector

Dingen om te onthouden:

  1. Met overbelasting van de operator kunt u de manier waarop een operator alleen werkt, opnieuw definiëren voor de door de gebruiker gedefinieerde typen (objecten, structuren). Je kunt het niet gebruiken voor ingebouwde typen (float, char, int, etc.).
  2. De operators = en & C ++ zijn standaard overbelast. U kunt bijvoorbeeld de objecten van dezelfde Klasse rechtstreeks kopiëren met de operator =.
  3. Operatorprioriteit verandert niets aan de associatie en prioriteit van operatoren. U kunt de volgorde van evaluatie echter wijzigen met haakjes.
  4. Er zijn vier operators die u niet kunt overbelasten in C ++. Ze omvatten de operator voor bereikresolutie (: :), operator voor ledenselectie (.), Ledenselectie door middel van een aanwijzer naar functie-operator (. *) En de ternaire operator (? :).

Regels voor overbelasting door operator:

Hier zijn regels voor overbelasting door operator:

  • Om het te laten werken, moet ten minste één operand een door de gebruiker gedefinieerd klasseobject zijn.
  • U kunt alleen bestaande operators overbelasten. Je kunt nieuwe operators niet overbelasten.
  • Sommige operators kunnen niet worden overbelast met een vriendenfunctie. Dergelijke operators kunnen echter worden overbelast met de lidfunctie.

Operator overbelasten:

Voorbeeld 1:

#include 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;}

Uitgang:

Hier is een screenshot van de code:

Code Verklaring:

  1. Inclusief het iostream-headerbestand in onze code om de functies ervan te gebruiken.
  2. Neem de std-naamruimte op in ons programma om zijn klassen te gebruiken zonder deze op te roepen.
  3. Maak een klasse met de naam OperatorOverload.
  4. Gebruik de privétoegangsmodificator, die een klaslid markeert als privé toegankelijk.
  5. Maak een integer-variabele x. Deze variabele is privé toegankelijk.
  6. Gebruik de modifier voor openbare toegang, die een klaslid markeert als privé toegankelijk.
  7. Gebruik een klassenconstructor om variabele x te initialiseren tot 10.
  8. Overbelast de betekenis van de ++ operator.
  9. De operator verhoogt de waarde van variabele x met 2.
  10. Einde van het overbelastingsgedeelte van de operator. De operator heeft een nieuwe naam gekregen.
  11. De functie Print () aanroepen.
  12. Druk de waarde van variabele x af naast andere tekst op de console wanneer de functie Print () wordt aangeroepen.
  13. Einde van de hoofdtekst van de functie Print ().
  14. Einde van de klas.
  15. Roep de functie main () aan. De programmalogica moet binnen deze functie worden toegevoegd.
  16. Maak een instantie van de OperatorOverload-klasse met de naam ov.
  17. Dit zal de ongeldige operator ++ () functie aanroepen.
  18. Gebruik het standpunt van de klasse OperatorOverload om de functie Print () aan te roepen.
  19. De functie moet waarde retourneren na succesvolle voltooiing.
  20. Einde van de hoofdtekst van de functie main ().

Voorbeeld 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();}

Uitgang:

Hier is een screenshot van de code:

Code Verklaring:

  1. Het opnemen van het iostream-headerbestand in ons programma om zijn functies te gebruiken.
  2. Neem de std-naamruimte op in ons programma om zijn klassen te gebruiken zonder het aan te roepen.
  3. Maak een klasse met de naam TestClass. De {markeert het begin van de hoofdtekst van de klas.
  4. Gebruik de privétoegangsmodificator om variabelen als privé te markeren, wat betekent dat ze alleen toegankelijk zijn vanuit de Klasse.
  5. Definieer twee integer-variabelen, reëel en hoger.
  6. Gebruik de modifier voor openbare toegang om de constructor als openbaar te markeren, wat betekent dat deze zelfs buiten de klasse toegankelijk zal zijn.
  7. De klassenconstructor maken en de variabelen initialiseren.
  8. Initialiseer de waarde van variabele reëel.
  9. Initialiseer de waarde van de variabele over.
  10. Einde van de constructorbody.
  11. Overschrijf de betekenis van de + operator.
  12. Maak het resultaat van het gegevenstype van het type TestClass.
  13. Gebruik de operator + bij complexe getallen. Deze regel voegt het reële deel van een getal toe aan het reële gedeelte van een ander getal.
  14. Gebruik de operator + bij complexe getallen. Deze regel voegt het imaginaire deel van een getal toe aan het imaginaire gedeelte van een ander getal.
  15. Het programma retourneert de waarde van het variabele resultaat na succesvolle uitvoering.
  16. Einde van de definitie van de nieuwe betekenis van operator +, dat wil zeggen overbelasting.
  17. Roep de methode print () aan.
  18. Druk het nieuwe complexe nummer af na toevoeging op de console.
  19. Einde van de body of print () functie.
  20. Einde van de body van TestClass Class.
  21. De functie main () aanroepen.
  22. Het doorgeven van de waarden van zowel echte als complexe onderdelen die moeten worden toegevoegd. Het eerste deel van c1 wordt toegevoegd aan het eerste deel van c2, dat wil zeggen 9 + 4. Het tweede deel van c1 wordt toegevoegd aan het tweede deel van c, dat wil zeggen 5 + 3.
  23. Een bewerking uitvoeren met de operator overbelast + en het resultaat opslaan in variabele c3.
  24. De waarde van variabele c3 op de console afdrukken.
  25. Einde van de hoofdtekst van de functie main ().

Overzicht:

  • U kunt meer dan één betekenis specificeren voor een C ++ - operator in één bereik.
  • Dit wordt overbelasting door de operator genoemd.
  • Overbelasting van operators biedt een speciale betekenis van een operator voor een door de gebruiker gedefinieerd gegevenstype.
  • U kunt de meeste C ++ -operatoren opnieuw definiëren door overbelasting van de operator.
  • Niet alle C ++ - operators kunnen worden overbelast.
  • Om een ​​operator te overbelasten, moet ten minste één van de operanden een door de gebruiker gedefinieerd object zijn.
  • Alleen bestaande operators kunnen worden overbelast. Je kunt nieuwe operators niet overbelasten.