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:
#includeusing 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:
- Zahrnutí souboru záhlaví iostream do našeho kódu pro použití jeho funkcí.
- Zahrňte do našeho programu standardní obor názvů, abyste mohli používat jeho třídy, aniž byste jej volali.
- Vytvořte třídu s názvem TestClass.
- Použijte modifikátor soukromého přístupu, který člena třídy označí 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ý člena třídy označí jako soukromě přístupného.
- Pomocí konstruktoru třídy inicializujte čítač proměnných na 5.
- Přetížit význam - operátora.
- Operátor sníží hodnotu proměnné x o 1.
- Konec sekce přetížení obsluhy. Provozovatel dostal nové jméno.
- Definování funkce s názvem funkce Display ().
- 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 ().
- Konec těla třídy.
- Zavolejte funkci main (). Logika programu by měla být přidána do této funkce.
- Vytvořte instanci třídy TestClass a pojmenujte ji tc.
- Tím se zavolá funkce void operator - ().
- Použijte postoj třídy TestClass k volání funkce Display ().
- Funkce musí po úspěšném dokončení vrátit hodnotu.
- 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í:
- Funkce člena
- Nečlenská funkce
- 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í:
- 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.).
- 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 =.
- Priorita operátorů nezmění asociativní a prioritu operátorů. Pořadí vyhodnocení však můžete změnit pomocí závorek.
- 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:
#includeusing 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:
- Zahrnutí souboru záhlaví iostream do našeho kódu pro použití jeho funkcí.
- Zahrňte do našeho programu standardní obor názvů, abyste mohli používat jeho třídy, aniž byste jej volali.
- Vytvořte třídu s názvem OperatorOverload.
- Použijte modifikátor soukromého přístupu, který člena třídy označí 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ý člena třídy označí jako soukromě přístupného.
- Pomocí konstruktoru třídy inicializujte proměnnou x na 10.
- Přetížit význam operátoru ++.
- Operátor zvýší hodnotu proměnné x o 2.
- Konec sekce přetížení obsluhy. Provozovatel dostal nové jméno.
- Volání funkce Print ().
- Vytiskněte hodnotu proměnné x spolu s dalším textem na konzole, když je volána funkce Print ().
- Konec těla funkce Print ().
- Konec těla třídy.
- Zavolejte funkci main (). Logika programu by měla být přidána do této funkce.
- Vytvořte instanci třídy OperatorOverload s názvem ov.
- Tím se zavolá funkce void operator ++ ().
- Použijte postoj třídy OperatorOverload k volání funkce Print ().
- Funkce musí po úspěšném dokončení vrátit hodnotu.
- 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:
- Zahrnutí souboru záhlaví iostream do našeho programu za účelem využití jeho funkcí.
- Zahrňte do našeho programu std namespace, abyste mohli používat jeho třídy, aniž byste jej volali.
- Vytvořte třídu s názvem TestClass. {Označuje začátek těla třídy.
- 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.
- Definujte dvě celočíselné proměnné, skutečné a více.
- 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.
- Vytvoření konstruktoru třídy a inicializace proměnných.
- Inicializujte hodnotu proměnné real.
- Inicializujte hodnotu proměnné znovu.
- Konec těla konstruktoru.
- Přepsat význam operátoru +.
- Vytvořte výsledek datového typu typu TestClass.
- Použijte operátor + se složitými čísly. Tento řádek přidá skutečnou část čísla ke skutečné části jiného čísla.
- Použijte operátor + se složitými čísly. Tento řádek přidá imaginární část čísla k imaginární části jiného čísla.
- Po úspěšném provedení program vrátí hodnotu výsledku proměnné.
- Konec definice nového významu operátoru +, tedy přetížení.
- Zavolejte metodu print ().
- Po přidání na konzolu vytiskněte nové komplexní číslo.
- Konec těla funkce print ().
- Konec těla třídy TestClass.
- Volání funkce main ().
- 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.
- 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 ().
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.