Přetížení operátora C ++ s příklady

Obsah:

Anonim

Co je přetížení operátora?

Pomocí přetížení operátoru v C ++ můžete zadat více než jeden význam pro operátor v jednom oboru. Účelem přetížení operátoru je poskytnout speciální význam operátoru pro uživatelem definovaný datový typ.

S pomocí přetížení operátorů můžete předefinovat většinu operátorů C ++. Přetížení operátoru můžete také použít k provedení různých operací pomocí jednoho operátoru.

V tomto výukovém programu C ++ se naučíte:

  • Co je přetížení operátora?
  • Syntax
  • Různé přístupy k přetížení operátora v C ++
  • Lze přetížit všechny operátory C ++?
  • Věci k zapamatování:
  • Pravidla pro přetížení operátora:
  • Jak přetížit operátora:

Syntax

Chcete-li přetížit operátor C ++, měli byste definovat speciální funkci uvnitř třídy následovně:

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

Zde je vysvětlení výše uvedené syntaxe:

  • Return_type je návratový typ pro funkci.
  • Dále uvedete klíčové slovo operátor.
  • Symbol označuje symbol operátoru, který má být přetížen. Například +, -, <, ++.
  • Argumenty lze předat funkci operátora stejným způsobem jako funkce.

Pří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ýstup:

Zde je snímek obrazovky s kódem:

Vysvětlení kódu:

  1. Zahrnutí souboru záhlaví iostream do našeho kódu pro použití jeho funkcí.
  2. Zahrňte do našeho programu standardní obor názvů, abyste mohli používat jeho třídy, aniž byste jej volali.
  3. Vytvořte třídu s názvem TestClass.
  4. Použijte modifikátor soukromého přístupu, který člena třídy označí jako soukromě přístupného.
  5. Vytvořte počet celočíselných proměnných. Tato proměnná bude soukromě přístupná.
  6. Použijte modifikátor veřejného přístupu, který člena třídy označí jako soukromě přístupného.
  7. Pomocí konstruktoru třídy inicializujte čítač proměnných na 5.
  8. Přetížit význam - operátora.
  9. Operátor sníží hodnotu proměnné x o 1.
  10. Konec sekce přetížení obsluhy. Provozovatel dostal nové jméno.
  11. Definování funkce s názvem funkce Display ().
  12. Vytiskněte hodnotu počtu proměnných spolu s dalším textem na konzole, když je volána funkce Display (). } Označuje konec těla funkce Display ().
  13. Konec těla třídy.
  14. Zavolejte funkci main (). Logika programu by měla být přidána do této funkce.
  15. Vytvořte instanci třídy TestClass a pojmenujte ji tc.
  16. Tím se zavolá funkce void operator - ().
  17. Použijte postoj třídy TestClass k volání funkce Display ().
  18. Funkce musí po úspěšném dokončení vrátit hodnotu.
  19. Konec těla funkce main ().

Různé přístupy k přetížení operátora v C ++

Přetížení operátoru můžete provést implementací některého z následujících typů funkcí:

  1. Funkce člena
  2. Nečlenská funkce
  3. Funkce přítele
  • Funkce přetížení operátoru může být členská funkce, když je levý operand objekt třídy.
  • Když je levý operand jiný, funkce přetížení Operator by měla být nečlenskou funkcí.

Z funkce přetížení operátoru můžete udělat funkci přítele, pokud potřebuje přístup k členům soukromé a chráněné třídy.

Lze přetížit všechny operátory C ++?

Ne. Existují operátoři C ++, které nelze přetížit.

Obsahují:

  • :: -Operátor rozlišení oboru
  • ?: - externí operátor.
  • . -selektor členů
  • Operátor sizeof
  • * - volič ukazatele člena

Věci k zapamatování:

  1. S přetížením operátora můžete předefinovat způsob, jakým operátor pracuje pouze pro typy definované uživatelem (objekty, struktury). Nelze jej použít pro vestavěné typy (float, char, int atd.).
  2. Operátory = a & C ++ jsou ve výchozím nastavení přetíženy. Například můžete kopírovat objekty stejné třídy přímo pomocí operátoru =.
  3. Priorita operátorů nezmění asociativní a prioritu operátorů. Pořadí vyhodnocení však můžete změnit pomocí závorek.
  4. V C ++ nelze přetížit čtyři operátory. Zahrnují operátor rozlišení oboru (: :), operátor výběru členů (.), Výběr členů pomocí ukazatele na operátor funkce (. *) A ternární operátor (? :).

Pravidla pro přetížení operátora:

Zde jsou pravidla pro přetížení operátora:

  • Aby to fungovalo, musí být alespoň jeden operand uživatelem definovaný objekt třídy.
  • Můžete přetížit pouze existující operátory. Nemůžete přetížit nové operátory.
  • Některé operátory nelze přetížit pomocí funkce přítele. Tyto operátory však lze přetížit pomocí členské funkce.

Jak přetížit operátora:

Pří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ýstup:

Zde je snímek obrazovky s kódem:

Vysvětlení kódu:

  1. Zahrnutí souboru záhlaví iostream do našeho kódu pro použití jeho funkcí.
  2. Zahrňte do našeho programu standardní obor názvů, abyste mohli používat jeho třídy, aniž byste jej volali.
  3. Vytvořte třídu s názvem OperatorOverload.
  4. Použijte modifikátor soukromého přístupu, který člena třídy označí jako soukromě přístupného.
  5. Vytvořte celočíselnou proměnnou x. Tato proměnná bude soukromě přístupná.
  6. Použijte modifikátor veřejného přístupu, který člena třídy označí jako soukromě přístupného.
  7. Pomocí konstruktoru třídy inicializujte proměnnou x na 10.
  8. Přetížit význam operátoru ++.
  9. Operátor zvýší hodnotu proměnné x o 2.
  10. Konec sekce přetížení obsluhy. Provozovatel dostal nové jméno.
  11. Volání funkce Print ().
  12. Vytiskněte hodnotu proměnné x spolu s dalším textem na konzole, když je volána funkce Print ().
  13. Konec těla funkce Print ().
  14. Konec těla třídy.
  15. Zavolejte funkci main (). Logika programu by měla být přidána do této funkce.
  16. Vytvořte instanci třídy OperatorOverload s názvem ov.
  17. Tím se zavolá funkce void operator ++ ().
  18. Použijte postoj třídy OperatorOverload k volání funkce Print ().
  19. Funkce musí po úspěšném dokončení vrátit hodnotu.
  20. Konec těla funkce main ().

Pří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ýstup:

Zde je snímek obrazovky s kódem:

Vysvětlení kódu:

  1. Zahrnutí souboru záhlaví iostream do našeho programu za účelem využití jeho funkcí.
  2. Zahrňte do našeho programu std namespace, abyste mohli používat jeho třídy, aniž byste jej volali.
  3. Vytvořte třídu s názvem TestClass. {Označuje začátek těla třídy.
  4. Použijte modifikátor soukromého přístupu k označení proměnných jako soukromých, což znamená, že k nim lze přistupovat pouze zevnitř třídy.
  5. Definujte dvě celočíselné proměnné, skutečné a více.
  6. Použijte modifikátor veřejného přístupu k označení konstruktoru jako veřejného, ​​což znamená, že bude přístupný i mimo třídu.
  7. Vytvoření konstruktoru třídy a inicializace proměnných.
  8. Inicializujte hodnotu proměnné real.
  9. Inicializujte hodnotu proměnné znovu.
  10. Konec těla konstruktoru.
  11. Přepsat význam operátoru +.
  12. Vytvořte výsledek datového typu typu TestClass.
  13. Použijte operátor + se složitými čísly. Tento řádek přidá skutečnou část čísla ke skutečné části jiného čísla.
  14. Použijte operátor + se složitými čísly. Tento řádek přidá imaginární část čísla k imaginární části jiného čísla.
  15. Po úspěšném provedení program vrátí hodnotu výsledku proměnné.
  16. Konec definice nového významu operátoru +, tedy přetížení.
  17. Zavolejte metodu print ().
  18. Po přidání na konzolu vytiskněte nové komplexní číslo.
  19. Konec těla funkce print ().
  20. Konec těla třídy TestClass.
  21. Volání funkce main ().
  22. Předání hodnot skutečných i složitých částí, které mají být přidány. První část c1 bude přidána k první části c2, tedy 9 + 4. Druhá část c1 bude přidána k druhé části c, tj. 5 + 3.
  23. Provedení operace pomocí operátoru přetížení + a uložení výsledku do proměnné c3.
  24. Tisk hodnoty proměnné c3 na konzole.
  25. Konec těla funkce main ().

Souhrn:

  • Můžete zadat více než jeden význam pro operátor C ++ v jednom oboru.
  • Tomu se říká přetížení operátoru.
  • Přetížení operátoru poskytuje speciální význam operátoru pro uživatelem definovaný datový typ.
  • Většinu operátorů C ++ můžete předefinovat přetížením operátorů.
  • Nelze přetížit všechny operátory C ++.
  • Aby byl operátor přetížen, musí být alespoň jeden z operandů uživatelem definovaný objekt.
  • Lze přetížit pouze existující operátory. Nemůžete přetížit nové operátory.