Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

Overbelasting van C++-operator met voorbeelden

Wat is overbelasting van de operator?

Gebruik overbelasting van de operator in C++ kun je meer dan één betekenis voor een operator in één bereik specificeren. Het doel van operatoroverbelasting is om een ​​speciale betekenis van een operator te geven voor een door de gebruiker gedefinieerd gegevenstype.

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

In deze C++ tutorial leer je:

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

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 uitleg voor de bovenstaande syntaxis:

  • Het retourtype is het retourtype voor de functie.
  • Vervolgens vermeld je het operatorzoekwoord.
  • Het symbool geeft het operatorsymbool aan dat moet worden overbelast. 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;
}

Uitvoer:

Hier is een screenshot van de code:

Code uitleg:

  1. Het iostream-headerbestand in onze code opnemen om de functies ervan te gebruiken.
  2. Neem de std-naamruimte op in ons programma om de klassen te gebruiken zonder deze aan te roepen.
  3. Maak een klas met de naam TestClass.
  4. Gebruik de modifier voor privétoegang, die een klaslid markeert als privé toegankelijk.
  5. Maak een geheeltallige variabele telling. 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 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 de sectie overbelasting van de operator. 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 de les.
  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. Hiermee wordt de functie void operator –() aangeroepen.
  17. Gebruik de stand van TestClass Class om de functie Display() aan te roepen.
  18. De functie moet een 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. Lidfunctie
  2. Niet-lidfunctie
  3. Vriendenfunctie
  • De overbelastingsfunctie van de operator kan een lidfunctie zijn wanneer een linkeroperand een object van de klasse is.
  • Als de linker operand anders is, moet de functie Operator overbelasting een functie zijn die geen lid is.

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

Kunnen alle C++-operators overbelast worden?

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

Ze omvatten:

  • ::-operator voor Scope-resolutie
  • ?:-ternaire operator.
  • . -ledenkiezer
  • Grootte van operator
  • * -lid aanwijzer selector

Dingen om te onthouden:

  1. Met overbelasting van operators kun je 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. Operatorvoorrang verandert de associatieve en voorrang van operators niet. U kunt de volgorde van evaluatie echter wijzigen door haakjes te gebruiken.
  4. Er zijn vier operators die je niet kunt overbelasten in C++. Ze omvatten de operator voor bereikresolutie (::), operator voor lidselectie (.), lidselectie via een aanwijzer naar functie-operator (.*) en de ternaire operator (?:).

Regels voor overbelasting door operators:

Hier zijn regels voor overbelasting door operators:

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

Hoe de operator te 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;
}

Uitvoer:

Hier is een screenshot van de code:

Code uitleg:

  1. Het iostream-headerbestand in onze code opnemen om de functies ervan te gebruiken.
  2. Neem de std-naamruimte op in ons programma om de klassen te gebruiken zonder deze aan te roepen.
  3. Maak een klasse met de naam OperatorOverload.
  4. Gebruik de modifier voor privétoegang, 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 de sectie overbelasting 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 les.
  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. Hiermee wordt de functie void operator ++() aangeroepen.
  18. Gebruik de stance van de klasse OperatorOverload om de functie Print() aan te roepen.
  19. De functie moet een waarde retourneren na succesvolle voltooiing.
  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();
}

Uitvoer:

Hier is een screenshot van de code:

Code uitleg:

  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 te gebruiken zonder deze aan te roepen.
  3. Maak een klasse met de naam TestClass. De { markeert het begin van de klas.
  4. Gebruik de modifier voor privétoegang om variabelen als privé te markeren, wat betekent dat ze alleen toegankelijk zijn vanuit de klasse.
  5. Definieer twee integer-variabelen, echt en groter.
  6. Gebruik de modifier voor openbare toegang om de constructor als openbaar te markeren, wat betekent dat deze ook buiten de klasse toegankelijk is.
  7. De klassenconstructor maken en de variabelen initialiseren.
  8. Initialiseer de waarde van de variabele real.
  9. Initialiseer de waarde van de variabele over.
  10. Einde van de constructortekst.
  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 deel van een ander getal.
  14. Gebruik de operator + bij complexe getallen. 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. Bel de methode print() aan.
  18. Druk het nieuwe complexe nummer af na toevoeging op de console.
  19. Einde van de hoofdtekst van de functie print().
  20. Einde van de inhoud van TestClass Class.
  21. De functie main() aanroepen.
  22. De waarden doorgeven van zowel reële als complexe delen die moeten worden toegevoegd. Het eerste deel van c1 wordt opgeteld bij 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 overloaded + en het resultaat opslaan in variabele c3.
  24. De waarde van variabele c3 afdrukken op de console.
  25. Einde van de hoofdtekst van de functie main().

Samenvatting:

  • U kunt meer dan één betekenis voor een C++-operator in één bereik specificeren.
  • Dit wordt overbelasting door operators genoemd.
  • Overbelasting van de operator geeft een speciale betekenis aan een operator voor een door de gebruiker gedefinieerd gegevenstype.
  • U kunt de meeste C++-operators opnieuw definiëren door overbelasting van operators.
  • 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.

C Taal

  1. Array doorgeven aan een functie in C++-programmering
  2. Overbelasting van Python-operator
  3. Operators in C++ met voorbeeld:wat is, typen en programma's
  4. C++ do...while-lus met voorbeelden
  5. C++-aanwijzers met voorbeelden
  6. C++ Char-gegevenstype met voorbeelden
  7. C++-structuur met voorbeeld
  8. std::lijst in C++ met Voorbeeld
  9. C++-functies met programmavoorbeelden
  10. Python Lambda-functies met VOORBEELDEN
  11. Python round() functie met VOORBEELDEN