C++ Operator overladen met voorbeelden

Wat is overbelasting van de operator?

gebruik operator overbelast in C++ kunt u meer dan één betekenis opgeven voor een operator in één bereik. Het doel van operatoroverbelasting is om een ​​speciale betekenis van een operator te geven voor een door de gebruiker gedefinieerd gegevenstype.

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

Syntaxis

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

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 aan dat het operatorsymbool overbelast is. Bijvoorbeeld +, -, <, ++.
  • De argument(en) 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:

Overbelasting door operator

Hier is een screenshot van de code:

Overbelasting door operator

Code Verklaring:

  1. Het iostream-headerbestand opnemen in onze code om de functies ervan te gebruiken.
  2. Neem de std-naamruimte op in ons programma om de klassen ervan te gebruiken zonder deze aan te roepen.
  3. Maak een klasse met de naam TestClass.
  4. Gebruik de privétoegangsmodifier, die een klaslid als privé toegankelijk markeert.
  5. Maak een geheel getalvariabeletelling. Deze variabele zal privé toegankelijk zijn.
  6. Gebruik de modifier voor openbare toegang, die een klaslid als privé toegankelijk markeert.
  7. Gebruik een klasseconstructor om de variabeleteller 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 voor de machinist. De operator heeft een nieuwe naam gekregen.
  11. Een functie definiëren met de naam Display()-functie.
  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 het klassenlichaam.
  14. Roep de functie main() aan. Binnen deze functie moet de programmalogica worden toegevoegd.
  15. Maak een instance van de klasse TestClass en geef deze de naam tc.
  16. Hiermee wordt de void-operator –() functie aangeroepen.
  17. Gebruik de houding van TestClass Class om de functie Display() aan te roepen.
  18. De functie moet na succesvolle voltooiing een waarde retourneren.
  19. Einde van de hoofdtekst van de functie main().

Verschillende benaderingen van overbelasting van operators in C++

U kunt operatoroverbelasting uitvoeren door een van de volgende stappen te implementerenwing soorten functies:

  1. Lid Functie
  2. Niet-ledenfunctie
  3. Vriend Functie
  • De operatoroverbelastingsfunctie kan een lidfunctie zijn wanneer een linkeroperand een object van de klasse is.
  • Als de linkeroperand anders is, moet de operatoroverbelastingsfunctie een niet-lidfunctie zijn.

U kunt van de operatoroverbelastingsfunctie een vriendenfunctie maken als deze toegang nodig heeft tot de privé- en beschermde klasleden.

Kunnen alle C++-operators overbelast raken?

Nee. Er zijn C++-operatoren die niet overbelast kunnen worden.

Zij omvatten:

  • :: -Bereikresolutie-operator
  • ?: -ternaire operator.
  • . -ledenkiezer
  • Grootte van operator
  • * -lidaanwijzerselector

Dingen om te onthouden

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

Regels voor overbelasting door operators

Hier volgen de regels voor overbelasting van operators:

  • Om dit te laten werken, moet ten minste één operand een door de gebruiker gedefinieerd klassenobject zijn.
  • Je kunt alleen bestaande operators overbelasten. Je kunt nieuwe operators niet overbelasten.
  • Sommige operators kunnen niet overbelast worden met behulp van een vriendenfunctie. Dergelijke operators kunnen echter overbelast raken als ze de lidfunctie gebruiken.

Operator overbelasten

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:

Voorbeeld van overbelastingsoperator

Hier is een screenshot van de code:

Voorbeeld van overbelastingsoperator

Code Verklaring:

  1. Het iostream-headerbestand opnemen in onze code om de functies ervan te gebruiken.
  2. Neem de std-naamruimte op in ons programma om de klassen ervan te gebruiken zonder deze aan te roepen.
  3. Maak een klasse met de naam OperatorOverload.
  4. Gebruik de privétoegangsmodifier, die een klaslid als privé toegankelijk markeert.
  5. Maak een geheel getalvariabele x. Deze variabele zal privé toegankelijk zijn.
  6. Gebruik de modifier voor openbare toegang, die een klaslid als privé toegankelijk markeert.
  7. Gebruik een klasseconstructor om variabele x te initialiseren naar 10.
  8. Overbelast de betekenis van de ++ operator.
  9. De operator verhoogt de waarde van variabele x met 2.
  10. Einde van het overbelastingsgedeelte voor de machinist. 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 het klassenlichaam.
  15. Roep de functie main() aan. Binnen deze functie moet de programmalogica worden toegevoegd.
  16. Maak een exemplaar van de OperatorOverload-klasse met de naam ov.
  17. Dit zal de void operator ++() functie aanroepen.
  18. Gebruik de houding van de klasse OperatorOverload om de functie Print() aan te roepen.
  19. De functie moet na succesvolle voltooiing een waarde retourneren.
  20. 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:

Voorbeeld van overbelastingsoperator

Hier is een screenshot van de code:

Voorbeeld van overbelastingsoperator

Code Verklaring:

  1. Het iostream-headerbestand in ons programma opnemen om de functies ervan te gebruiken.
  2. Neem de std-naamruimte op in ons programma om de klassen ervan te gebruiken zonder deze aan te roepen.
  3. Maak een klasse met de naam TestClass. De { markeert het begin van de hoofdtekst van de klasse.
  4. Gebruik de privétoegangsmodifier om variabelen als privé te markeren, wat betekent dat ze alleen toegankelijk zijn vanuit de klasse.
  5. Definieer twee integer-variabelen, real en over.
  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. Het maken van de klassenconstructor en het initialiseren van de variabelen.
  8. Initialiseer de waarde van variabele real.
  9. Initialiseer de waarde van de variabele over.
  10. Einde van het constructorlichaam.
  11. Overschrijf de betekenis van de operator +.
  12. Maak het gegevenstyperesultaat van het type TestClass.
  13. Gebruik de operator + met complex cijfers. Deze regel voegt het reële deel van een getal toe aan het reële deel van een ander getal.
  14. Gebruik de operator + met complex cijfers. Deze regel voegt het denkbeeldige deel van een getal toe aan het denkbeeldige deel van een ander getal.
  15. Het programma retourneert de waarde van het variabele resultaat bij 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 de nieuwe com afplex nummer na toevoeging op de console.
  19. Einde van de hoofdtekst van de functie print().
  20. Einde van de hoofdtekst van TestClass Class.
  21. De functie main() aanroepen.
  22. Het doorgeven van de waarden van zowel real als complex onderdelen toe te voegen. Het eerste deel van c1 wordt toegevoegd aan 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.
  23. Een bewerking uitvoeren met de operator overloaded + en het resultaat opslaan in variabele c3.
  24. Afdrukken van de waarde van variabele c3 op de console.
  25. Einde van de hoofdtekst van de functie main().

Samengevat

  • U kunt meer dan één betekenis voor a opgeven C++-operator in één bereik.
  • Dit wordt overbelasting van de operator genoemd.
  • Overbelasting door operators geeft een speciale betekenis van een operator voor een door de gebruiker gedefinieerd gegevenstype.
  • U kunt de meeste C++-operatoren opnieuw definiëren door operatoroverbelasting.
  • Niet alle C++-operators kunnen overbelast worden.
  • 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.