Preťaženie operátora C ++ príkladmi

Obsah:

Anonim

Čo je preťaženie operátora?

Pomocou preťaženia operátora v C ++ môžete zadať viac ako jeden význam pre operátor v jednom rozsahu. Účelom preťaženia operátora je poskytnúť špeciálny význam operátora pre užívateľsky definovaný dátový typ.

Pomocou preťaženia operátora môžete predefinovať väčšinu operátorov C ++. Preťaženie operátora môžete použiť aj na vykonávanie rôznych operácií pomocou jedného operátora.

V tomto výučbe pre C ++ sa dozviete:

  • Čo je preťaženie operátora?
  • Syntax
  • Rôzne prístupy k preťaženiu operátora v C ++
  • Môžu byť všetci operátori C ++ preťažení?
  • Na čo treba pamätať:
  • Pravidlá pre preťaženie operátora:
  • Ako preťažiť operátora:

Syntax

Ak chcete preťažiť operátor C ++, mali by ste vo vnútri triedy definovať špeciálnu funkciu takto:

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

Tu je vysvetlenie vyššie uvedenej syntaxe:

  • Return_type je návratový typ pre funkciu.
  • Ďalej spomeniete kľúčové slovo operátora.
  • Symbol označuje symbol operátora, ktorý má byť preťažený. Napríklad +, -, <, ++.
  • Argumenty môžu byť odovzdané funkcii operátora rovnakým spôsobom ako funkcie.

Príklad 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;}

Výkon:

Tu je snímka obrazovky s kódom:

Vysvetlenie kódu:

  1. Zahrnutie súboru hlavičky iostream do nášho kódu na využitie jeho funkcií.
  2. Zahrňte do nášho programu std namespace, aby ste mohli používať jeho triedy bez toho, aby ste ich volali.
  3. Vytvorte triedu s názvom TestClass.
  4. Použite modifikátor súkromného prístupu, ktorý člena triedy označí ako súkromne prístupného.
  5. Vytvorte počet celočíselných premenných. Táto premenná bude súkromne prístupná.
  6. Použite modifikátor verejného prístupu, ktorý člena triedy označí ako súkromne prístupného.
  7. Pomocou konštruktora triedy inicializujte počítadlo premenných na 5.
  8. Preťažte význam - operátora.
  9. Operátor zníži hodnotu premennej x o 1.
  10. Koniec preťažovacej časti operátora. Prevádzkovateľ dostal nové meno.
  11. Definovanie funkcie s názvom Funkcia Display ().
  12. Keď sa volá funkcia Display (), vytlačte spolu s ďalším textom na konzolu hodnotu počtu premenných. } Označuje koniec tela funkcie Display ().
  13. Koniec triedy.
  14. Zavolajte funkciu main (). Do tejto funkcie by sa mala pridať programová logika.
  15. Vytvorte inštanciu triedy TestClass a pomenujte ju tc.
  16. Týmto sa zavolá funkcia void operator - ().
  17. Použite postoj triedy TestClass na vyvolanie funkcie Display ().
  18. Po úspešnom dokončení musí funkcia vrátiť hodnotu.
  19. Koniec tela funkcie main ().

Rôzne prístupy k preťaženiu operátora v C ++

Preťaženie operátora môžete vykonať implementáciou niektorého z nasledujúcich typov funkcií:

  1. Funkcia člena
  2. Nečlenská funkcia
  3. Funkcia priateľa
  • Funkcia preťaženia operátora môže byť členskou funkciou, keď je operand Left objektom triedy.
  • Keď je operand vľavo iný, funkcia preťaženia operátora by mala byť nečlenskou funkciou.

Z funkcie preťaženia operátora môžete urobiť priateľskú funkciu, ak potrebuje prístup k členom súkromnej a chránenej triedy.

Môžu byť všetci operátori C ++ preťažení?

Nie. Existujú operátory C ++, ktoré nemožno preťažiť.

Zahŕňajú:

  • :: -Operátor rozlíšenia rozsahu
  • ?: - externý operátor.
  • . - volič členov
  • Veľkosť operátora
  • * - selektor ukazovateľa člena

Na čo treba pamätať:

  1. S preťažením operátora môžete predefinovať spôsob, akým operátor pracuje, iba pre typy definované používateľom (objekty, štruktúry). Nemôžete ho použiť pre vstavané typy (float, char, int atď.).
  2. Operátory = a & C ++ sú predvolene preťažené. Môžete napríklad kopírovať objekty tej istej triedy priamo pomocou operátora =.
  3. Prednosť operátora nemení asociatívne a prednosť operátorov. Poradie vyhodnotenia však môžete zmeniť pomocou zátvoriek.
  4. Existujú štyri operátory, ktoré v C ++ nemôžete preťažiť. Zahŕňajú operátor rozlíšenia rozsahu (: :), operátor výberu člena (.), Výber člena prostredníctvom operátora ukazovateľa na funkciu (. *) A ternárny operátor (? :).

Pravidlá pre preťaženie operátora:

Tu sú pravidlá pre preťaženie operátora:

  • Aby to fungovalo, musí byť aspoň jeden operand používateľom definovaný objekt triedy.
  • Preťažiť môžete iba existujúcich operátorov. Nemôžete preťažiť nových operátorov.
  • Niektorí operátori nemôžu byť preťažení pomocou funkcie priateľa. Takéto operátory však možno preťažiť pomocou členskej funkcie.

Ako preťažiť operátora:

Príklad 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;}

Výkon:

Tu je snímka obrazovky s kódom:

Vysvetlenie kódu:

  1. Zahrnutie súboru hlavičky iostream do nášho kódu na využitie jeho funkcií.
  2. Zahrňte do nášho programu std namespace, aby ste mohli používať jeho triedy bez toho, aby ste ich volali.
  3. Vytvorte triedu s názvom OperatorOverload.
  4. Použite modifikátor súkromného prístupu, ktorý člena triedy označí ako súkromne prístupného.
  5. Vytvorte celočíselnú premennú x. Táto premenná bude súkromne prístupná.
  6. Použite modifikátor verejného prístupu, ktorý člena triedy označí ako súkromne prístupného.
  7. Pomocou konštruktora triedy inicializujte premennú x na 10.
  8. Preťažte význam operátora ++.
  9. Operátor zvýši hodnotu premennej x o 2.
  10. Koniec preťažovacej časti operátora. Prevádzkovateľ dostal nové meno.
  11. Volanie funkcie Print ().
  12. Vytlačte hodnotu premennej x spolu s ďalším textom na konzole, keď sa volá funkcia Print ().
  13. Koniec tela funkcie Print ().
  14. Koniec triedy.
  15. Zavolajte funkciu main (). Do tejto funkcie by sa mala pridať programová logika.
  16. Vytvorte inštanciu triedy OperatorOverload s názvom ov.
  17. Týmto sa zavolá funkcia void operator ++ ().
  18. Na vyvolanie funkcie Print () použite postoj triedy OperatorOverload.
  19. Po úspešnom dokončení musí funkcia vrátiť hodnotu.
  20. Koniec tela funkcie main ().

Príklad 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();}

Výkon:

Tu je snímka obrazovky s kódom:

Vysvetlenie kódu:

  1. Zahrnutie hlavičkového súboru iostream do nášho programu, aby sme mohli využívať jeho funkcie.
  2. Zahrňte do nášho programu std namespace, aby ste mohli používať jeho triedy bez toho, aby ste ich volali.
  3. Vytvorte triedu s názvom TestClass. {Označuje začiatok tela triedy.
  4. Použite modifikátor súkromného prístupu na označenie premenných ako súkromných, čo znamená, že k nim je možné získať prístup iba z triedy.
  5. Definujte dve celočíselné premenné, skutočnú a ďalšiu.
  6. Použite modifikátor verejného prístupu na označenie konštruktora ako verejného, ​​čo znamená, že bude prístupný aj mimo triedy.
  7. Vytvorenie konštruktora triedy a inicializácia premenných.
  8. Inicializujte hodnotu premennej real.
  9. Inicializujte hodnotu premennej znova.
  10. Koniec tela konštruktéra.
  11. Prepísať význam operátora +.
  12. Vytvorte výsledok dátového typu typu TestClass.
  13. Použite operátor + s komplexnými číslami. Tento riadok pridá skutočnú časť čísla k skutočnej časti iného čísla.
  14. Použite operátor + s komplexnými číslami. Tento riadok pridá imaginárnu časť čísla k imaginárnej časti iného čísla.
  15. Po úspešnom vykonaní program vráti hodnotu výsledku premennej.
  16. Koniec definície nového významu operátora +, teda preťaženia.
  17. Zavolajte metódu print ().
  18. Po pridaní na konzolu vytlačte nové komplexné číslo.
  19. Koniec tela funkcie print ().
  20. Koniec tela triedy TestClass.
  21. Volanie funkcie main ().
  22. Je potrebné sčítať hodnoty skutočnej aj zložitej časti. Prvá časť C1 sa pridá k prvej časti C2, teda 9 + 4. Druhá časť C1 sa pridá k druhej časti c, teda 5 + 3.
  23. Vykonanie operácie pomocou operátora preťaženého + a uloženie výsledku do premennej c3.
  24. Vytlačí sa hodnota premennej c3 na konzole.
  25. Koniec tela hlavnej () funkcie.

Zhrnutie:

  • V jednom rozsahu môžete určiť viac ako jeden význam pre operátor C ++.
  • Toto sa nazýva preťaženie operátora.
  • Preťaženie operátora poskytuje špeciálny význam operátora pre užívateľsky definovaný dátový typ.
  • Väčšinu operátorov C ++ môžete predefinovať pomocou preťaženia operátora.
  • Nie všetci operátori C ++ môžu byť preťažení.
  • Na preťaženie operátora musí byť aspoň jeden z operandov objekt definovaný používateľom.
  • Preťažiť môžu iba existujúce operátory. Nemôžete preťažiť nových operátorov.