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:

Operator Přetížení

Zde je snímek obrazovky kódu:

Operator Přetížení

Vysvětlení kódu:

  1. Zahrnutí hlavičkového souboru iostream do našeho kódu pro použití jeho funkcí.
  2. Zahrňte do našeho programu jmenný prostor std, abyste mohli používat jeho třídy bez jeho volání.
  3. Vytvořte třídu s názvem TestClass.
  4. Použijte modifikátor soukromého přístupu, který označí člena třídy 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ý označí člena třídy jako soukromě přístupného.
  7. Použijte konstruktor třídy k inicializaci čítače proměnných na 5.
  8. Přetížení významu — operátoru.
  9. Operátor sníží hodnotu proměnné x o 1.
  10. Konec sekce přetížení obsluhy. Operátor dostal nové jméno.
  11. Definování funkce s názvem Display() function.
  12. 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().
  13. Konec těla třídy.
  14. Zavolejte funkci main(). Do této funkce by měla být přidána programová logika.
  15. Vytvořte instanci třídy TestClass a pojmenujte ji tc.
  16. Tím se zavolá funkce void operátor –().
  17. K volání funkce Display() použijte postoj třídy TestClass.
  18. Funkce musí po úspěšném dokončení vrátit hodnotu.
  19. 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í:

  1. Členská funkce
  2. Nečlenská funkce
  3. 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

  1. 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.).
  2. = 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 =.
  3. Operator priority nemění asociativní a prioritní operátory. Pořadí hodnocení však můžete změnit pomocí závorek.
  4. 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:

Přetížení Operato Příklad

Zde je snímek obrazovky kódu:

Přetížení Operato Příklad

Vysvětlení kódu:

  1. Zahrnutí hlavičkového souboru iostream do našeho kódu pro použití jeho funkcí.
  2. Zahrňte do našeho programu jmenný prostor std, abyste mohli používat jeho třídy bez jeho volání.
  3. Vytvořte třídu s názvem OperatorOverload.
  4. Použijte modifikátor soukromého přístupu, který označí člena třídy 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ý označí člena třídy jako soukromě přístupného.
  7. Použijte konstruktor třídy k inicializaci proměnné x na 10.
  8. Přetížení významu operátoru ++.
  9. Operátor zvýší hodnotu proměnné x o 2.
  10. Konec sekce přetížení obsluhy. Operátor dostal nové jméno.
  11. Volání funkce Print().
  12. Při volání funkce Print() vytiskněte hodnotu proměnné x vedle jiného textu na konzole.
  13. Konec těla funkce Print().
  14. Konec těla třídy.
  15. Zavolejte funkci main(). Do této funkce by měla být přidána programová logika.
  16. Vytvořte instanci souboru OperatorOverload Třída s názvem ov.
  17. To zavolá funkci void operator ++().
  18. Použijte postoj Operatřída torOverload 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

#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:

Přetížení Operato Příklad

Zde je snímek obrazovky kódu:

Přetížení Operato Příklad

Vysvětlení kódu:

  1. Zahrnutí hlavičkového souboru iostream do našeho programu, abychom mohli využívat jeho funkce.
  2. Zahrňte jmenný prostor std do našeho programu, abyste mohli používat jeho třídy bez jeho volání.
  3. Vytvořte třídu s názvem TestClass. { označuje začátek těla třídy.
  4. 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.
  5. Definujte dvě celočíselné proměnné, real a over.
  6. Pomocí modifikátoru public access označte konstruktor jako veřejný, což znamená, že bude přístupný i mimo třídu.
  7. Vytvoření konstruktoru třídy a inicializace proměnné.
  8. Inicializujte hodnotu proměnné real.
  9. Inicializujte hodnotu proměnné přes.
  10. Konec těla konstruktoru.
  11. Přepište význam operátoru +.
  12. Vytvořte výsledek datového typu typu TestClass.
  13. Pro komplexní čísla použijte operátor +. Tento řádek přidá skutečnou část čísla ke skutečné části jiného čísla.
  14. Pro komplexní čísla použijte operátor +. 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 proměnné výsledek.
  16. Konec definice nového významu operátoru +, tedy přetěžování.
  17. Zavolejte metodu print().
  18. Po přidání na konzoli 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á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.
  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().

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.