C++ Operator Přetížení příklady

⚡ Chytré shrnutí

Operapřetížení tor v C++ umožňuje vám předefinovat, jak vestavěné operátory jako + a == fungují s vašimi vlastními třídami a objekty. Zde se dozvíte jejich syntaxi, přístupy, které operátory lze přetížit a pravidla, která je třeba dodržovat.

  • Co to je: OperaPřetížení Toru předefinuje operátory jako + pro vaše vlastní třídy.
  • __ Syntaxe: Definujte funkci s názvem operator následovanou symbolem, například operator+.
  • 🔀 Přístupy: Operátory můžete přetížit jako členské funkce nebo spřátelené funkce.
  • 🚫 Limity: Některé operátory, jako například ::, . a ?:, nelze přetížit.
  • 🤖 Pomoc s umělou inteligencí: Nástroje umělé inteligence, jako je GitHub Copilot, okamžitě zadávají funkce přetížení operátorů.

C++ Operator Přetížení

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í

Code Vysvětlení:

  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

Code Vysvětlení:

  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

Code Vysvětlení:

  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().

Nejčastější dotazy

OperaPřetížení Tor vám umožňuje předefinovat, jak vestavěné operátory, jako například + nebo ==, fungují s objekty vašich vlastních tříd, aby se chovaly přirozeně pro vlastní datové typy.

Definujte speciální funkci, jejíž název je klíčové slovo operátor následované symbolem, například operator+. Funkce bere operandy jako parametry a vrací výsledek.

Existují dva hlavní přístupy: přetížení operátoru jako členské funkce třídy nebo jako spřízněné funkce, která má přístup k soukromým členům třídy.

Většinu operátorů lze přetížit, ale některé ne, včetně operátorů pro rozlišení rozsahu (::), přístup k členům (.), ukazatel členu (.*) a ternární operátory (?:).

Přetížit můžete pouze existující operátory, alespoň jeden operand musí být uživatelem definovaného typu a nelze změnit prioritu operátoru, asociativitu ani počet operandů.

Asistenti umělé inteligence, jako je GitHub Copilot, generují pro vaše třídy funkce pro přetížení operátorů, vybírají mezi členskými a přátelskými funkcemi a při psaní přidávají správné návratové typy.

Ano. Nástroje s umělou inteligencí generují přetížené operátory jako + a ==, řídí se standardními pravidly a označují operátory, které nelze přetížit, čímž šetří čas a eliminují chyby.

OperaPřetížení torů usnadňuje používání a čtení tříd tím, že umožňuje objektům pracovat se známými operátory, jako je například sčítání dvou vektorů pomocí + místo pojmenované funkce.

Shrňte tento příspěvek takto: