C++ Operator Přetížení příklady
Co je to Operator Přetížení?
Použití přetížení obsluhy in C++, můžete zadat více než jeden význam pro operátor v jednom oboru. Účelem přetížení operátora je poskytnout speciální význam operátora pro uživatelsky definovaný datový typ.
Pomocí přetížení operátorů můžete předefinovat většinu C++ operátory. Můžete také použít přetížení operátora k provádění různých operací pomocí jednoho operátora.
Syntax
K přetížení a C++ operátor, měli byste definovat speciální funkci uvnitř třídy takto:
class class_name { ... .. ... public return_type operator symbol (argument(s)) { ... .. ... } ... .. ... };
Zde je vysvětlení výše uvedené syntaxe:
- Návratový_typ je návratový typ funkce.
- Dále zmíníte klíčové slovo operátor.
- Symbol označuje symbol operátora, který má být přetížen. Například +, -, <, ++.
- Argument(y) lze předat funkci operátoru stejným způsobem jako funkce.
Příklad 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; }
Výstup:
Zde je snímek obrazovky kódu:
Vysvětlení kódu:
- Zahrnutí hlavičkového souboru iostream do našeho kódu pro použití jeho funkcí.
- Zahrňte do našeho programu jmenný prostor std, abyste mohli používat jeho třídy bez jeho volání.
- Vytvořte třídu s názvem TestClass.
- Použijte modifikátor soukromého přístupu, který označí člena třídy jako soukromě přístupného.
- Vytvořte počet celočíselných proměnných. Tato proměnná bude soukromě přístupná.
- Použijte modifikátor veřejného přístupu, který označí člena třídy jako soukromě přístupného.
- Použijte konstruktor třídy k inicializaci čítače proměnných na 5.
- Přetížení významu — operátoru.
- Operátor sníží hodnotu proměnné x o 1.
- Konec sekce přetížení obsluhy. Operátor dostal nové jméno.
- Definování funkce s názvem Display() function.
- Při volání funkce Display() vytiskněte na konzole hodnotu počtu proměnných vedle jiného textu. Znak } označuje konec těla funkce Display().
- Konec těla třídy.
- Zavolejte funkci main(). Do této funkce by měla být přidána programová logika.
- Vytvořte instanci třídy TestClass a pojmenujte ji tc.
- Tím se zavolá funkce void operátor –().
- K volání funkce Display() použijte postoj třídy TestClass.
- Funkce musí po úspěšném dokončení vrátit hodnotu.
- Konec těla funkce main().
Různé přístupy k Operator Přetížení v C++
Přetížení operátora můžete provést implementací některé z následujících typů funkcí:
- Členská funkce
- Nečlenská funkce
- Funkce přítele
- Funkce přetížení operátora může být členskou funkcí, když je levý operand objektem třídy.
- Když je levý operand jiný, je OperaFunkce přetížení tor by měla být nečlenskou funkcí.
Funkci přetížení operátora můžete nastavit jako funkci přátel, pokud potřebuje přístup k soukromým a chráněným členům třídy.
Může všechny C++ Operators být přetížen?
Ne. Jsou C++ operátory, které nelze přetížit.
Patří mezi ně:
- :: -Operátor rozlišení rozsahu
- ?: -ternární operátor.
- . -volič členů
- Velikost operátora
- * -selektor ukazatele člena
Důležité informace
- S přetížením operátora můžete předefinovat způsob, jakým operátor pracuje pouze pro uživatelem definované typy (objekty, struktury). Nemůžete jej použít pro vestavěné typy (float, char, int atd.).
- = a & C++ Operátoři jsou standardně přetíženi. Můžete například přímo zkopírovat objekty stejné třídy pomocí operátoru =.
- Operator priority nemění asociativní a prioritní operátory. Pořadí hodnocení však můžete změnit pomocí závorek.
- Existují čtyři operátoři, které nemůžete přetížit C++. Patří mezi ně operátor rozlišení rozsahu (::), operátor výběru členů (.), výběr členů prostřednictvím ukazatele na operátor funkce (.*) a ternární operátor (?:).
Pravidla pro Operator Přetížení
Zde jsou pravidla pro OperaPřetížení tor:
- Aby to fungovalo, musí být alespoň jeden operand uživatelsky definovaný objekt třídy.
- Můžete pouze přetížit stávající operátory. Nemůžete přetížit nové operátory.
- Některé operátory nelze přetížit pomocí funkce přítele. Takové operátory však mohou být přetíženy pomocí členské funkce.
Jak přetížit OperaTor
Příklad 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; }
Výstup:
Zde je snímek obrazovky kódu:
Vysvětlení kódu:
- Zahrnutí hlavičkového souboru iostream do našeho kódu pro použití jeho funkcí.
- Zahrňte do našeho programu jmenný prostor std, abyste mohli používat jeho třídy bez jeho volání.
- Vytvořte třídu s názvem OperatorOverload.
- Použijte modifikátor soukromého přístupu, který označí člena třídy jako soukromě přístupného.
- Vytvořte celočíselnou proměnnou x. Tato proměnná bude soukromě přístupná.
- Použijte modifikátor veřejného přístupu, který označí člena třídy jako soukromě přístupného.
- Použijte konstruktor třídy k inicializaci proměnné x na 10.
- Přetížení významu operátoru ++.
- Operátor zvýší hodnotu proměnné x o 2.
- Konec sekce přetížení obsluhy. Operátor dostal nové jméno.
- Volání funkce Print().
- Při volání funkce Print() vytiskněte hodnotu proměnné x vedle jiného textu na konzole.
- Konec těla funkce Print().
- Konec těla třídy.
- Zavolejte funkci main(). Do této funkce by měla být přidána programová logika.
- Vytvořte instanci souboru OperatorOverload Třída s názvem ov.
- To zavolá funkci void operator ++().
- Použijte postoj Operatřída torOverload k volání funkce Print().
- Funkce musí po úspěšném dokončení vrátit hodnotu.
- Konec těla funkce main().
Příklad 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(); }
Výstup:
Zde je snímek obrazovky kódu:
Vysvětlení kódu:
- Zahrnutí hlavičkového souboru iostream do našeho programu, abychom mohli využívat jeho funkce.
- Zahrňte jmenný prostor std do našeho programu, abyste mohli používat jeho třídy bez jeho volání.
- Vytvořte třídu s názvem TestClass. { označuje začátek těla třídy.
- Modifikátor soukromého přístupu použijte k označení proměnných jako soukromých, což znamená, že k nim lze přistupovat pouze ze třídy.
- Definujte dvě celočíselné proměnné, real a over.
- Pomocí modifikátoru public access označte konstruktor jako veřejný, což znamená, že bude přístupný i mimo třídu.
- Vytvoření konstruktoru třídy a inicializace proměnné.
- Inicializujte hodnotu proměnné real.
- Inicializujte hodnotu proměnné přes.
- Konec těla konstruktoru.
- Přepište význam operátoru +.
- Vytvořte výsledek datového typu typu TestClass.
- Pro komplexní čísla použijte operátor +. Tento řádek přidá skutečnou část čísla ke skutečné části jiného čísla.
- Pro komplexní čísla použijte operátor +. Tento řádek přidá imaginární část čísla k imaginární části jiného čísla.
- Po úspěšném provedení program vrátí hodnotu proměnné výsledek.
- Konec definice nového významu operátoru +, tedy přetěžování.
- Zavolejte metodu print().
- Po přidání na konzoli vytiskněte nové komplexní číslo.
- Konec těla funkce print().
- Konec těla třídy TestClass.
- Volání funkce main().
- Předávání hodnot skutečných i komplexní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 se přidá k druhé části c, tedy 5+3.
- Provedení operace pomocí operátoru přetížení + a uložení výsledku do proměnné c3.
- Tisk hodnoty proměnné c3 na konzole.
- Konec těla funkce main().
Shrnutí
- Pro a můžete zadat více než jeden význam C++ provozovatel v jednom rozsahu.
- Tomu se říká přetížení operátora.
- OperaPřetížení tor poskytuje speciální význam operátoru pro uživatelsky definovaný datový typ.
- Většinu můžete předefinovat C++ operátorů přes přetížení operátorů.
- Ne vše C++ Operátoři mohou být přetíženi.
- Aby byl operátor přetížen, musí být alespoň jeden z operandů uživatelem definovaný objekt.
- Přetížení mohou být pouze stávající operátoři. Nemůžete přetížit nové operátory.