Čo je preťaženie operátora?
Pomocou preťaženia operátora v C ++ môžete zadať viac ako jeden význam pre operátor v jednom rozsahu. Účelom preťaženia operátora je poskytnúť špeciálny význam operátora pre užívateľsky definovaný dátový typ.
Pomocou preťaženia operátora môžete predefinovať väčšinu operátorov C ++. Preťaženie operátora môžete použiť aj na vykonávanie rôznych operácií pomocou jedného operátora.
V tomto výučbe pre C ++ sa dozviete:
- Čo je preťaženie operátora?
- Syntax
- Rôzne prístupy k preťaženiu operátora v C ++
- Môžu byť všetci operátori C ++ preťažení?
- Na čo treba pamätať:
- Pravidlá pre preťaženie operátora:
- Ako preťažiť operátora:
Syntax
Ak chcete preťažiť operátor C ++, mali by ste vo vnútri triedy definovať špeciálnu funkciu takto:
class class_name{… publicreturn_type operator symbol (argument(s)){… }… };
Tu je vysvetlenie vyššie uvedenej syntaxe:
- Return_type je návratový typ pre funkciu.
- Ďalej spomeniete kľúčové slovo operátora.
- Symbol označuje symbol operátora, ktorý má byť preťažený. Napríklad +, -, <, ++.
- Argumenty môžu byť odovzdané funkcii operátora rovnakým spôsobom ako funkcie.
Prí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ýkon:
Tu je snímka obrazovky s kódom:
Vysvetlenie kódu:
- Zahrnutie súboru hlavičky iostream do nášho kódu na využitie jeho funkcií.
- Zahrňte do nášho programu std namespace, aby ste mohli používať jeho triedy bez toho, aby ste ich volali.
- Vytvorte triedu s názvom TestClass.
- Použite modifikátor súkromného prístupu, ktorý člena triedy označí ako súkromne prístupného.
- Vytvorte počet celočíselných premenných. Táto premenná bude súkromne prístupná.
- Použite modifikátor verejného prístupu, ktorý člena triedy označí ako súkromne prístupného.
- Pomocou konštruktora triedy inicializujte počítadlo premenných na 5.
- Preťažte význam - operátora.
- Operátor zníži hodnotu premennej x o 1.
- Koniec preťažovacej časti operátora. Prevádzkovateľ dostal nové meno.
- Definovanie funkcie s názvom Funkcia Display ().
- Keď sa volá funkcia Display (), vytlačte spolu s ďalším textom na konzolu hodnotu počtu premenných. } Označuje koniec tela funkcie Display ().
- Koniec triedy.
- Zavolajte funkciu main (). Do tejto funkcie by sa mala pridať programová logika.
- Vytvorte inštanciu triedy TestClass a pomenujte ju tc.
- Týmto sa zavolá funkcia void operator - ().
- Použite postoj triedy TestClass na vyvolanie funkcie Display ().
- Po úspešnom dokončení musí funkcia vrátiť hodnotu.
- Koniec tela funkcie main ().
Rôzne prístupy k preťaženiu operátora v C ++
Preťaženie operátora môžete vykonať implementáciou niektorého z nasledujúcich typov funkcií:
- Funkcia člena
- Nečlenská funkcia
- Funkcia priateľa
- Funkcia preťaženia operátora môže byť členskou funkciou, keď je operand Left objektom triedy.
- Keď je operand vľavo iný, funkcia preťaženia operátora by mala byť nečlenskou funkciou.
Z funkcie preťaženia operátora môžete urobiť priateľskú funkciu, ak potrebuje prístup k členom súkromnej a chránenej triedy.
Môžu byť všetci operátori C ++ preťažení?
Nie. Existujú operátory C ++, ktoré nemožno preťažiť.
Zahŕňajú:
- :: -Operátor rozlíšenia rozsahu
- ?: - externý operátor.
- . - volič členov
- Veľkosť operátora
- * - selektor ukazovateľa člena
Na čo treba pamätať:
- S preťažením operátora môžete predefinovať spôsob, akým operátor pracuje, iba pre typy definované používateľom (objekty, štruktúry). Nemôžete ho použiť pre vstavané typy (float, char, int atď.).
- Operátory = a & C ++ sú predvolene preťažené. Môžete napríklad kopírovať objekty tej istej triedy priamo pomocou operátora =.
- Prednosť operátora nemení asociatívne a prednosť operátorov. Poradie vyhodnotenia však môžete zmeniť pomocou zátvoriek.
- Existujú štyri operátory, ktoré v C ++ nemôžete preťažiť. Zahŕňajú operátor rozlíšenia rozsahu (: :), operátor výberu člena (.), Výber člena prostredníctvom operátora ukazovateľa na funkciu (. *) A ternárny operátor (? :).
Pravidlá pre preťaženie operátora:
Tu sú pravidlá pre preťaženie operátora:
- Aby to fungovalo, musí byť aspoň jeden operand používateľom definovaný objekt triedy.
- Preťažiť môžete iba existujúcich operátorov. Nemôžete preťažiť nových operátorov.
- Niektorí operátori nemôžu byť preťažení pomocou funkcie priateľa. Takéto operátory však možno preťažiť pomocou členskej funkcie.
Ako preťažiť operátora:
Prí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ýkon:
Tu je snímka obrazovky s kódom:
Vysvetlenie kódu:
- Zahrnutie súboru hlavičky iostream do nášho kódu na využitie jeho funkcií.
- Zahrňte do nášho programu std namespace, aby ste mohli používať jeho triedy bez toho, aby ste ich volali.
- Vytvorte triedu s názvom OperatorOverload.
- Použite modifikátor súkromného prístupu, ktorý člena triedy označí ako súkromne prístupného.
- Vytvorte celočíselnú premennú x. Táto premenná bude súkromne prístupná.
- Použite modifikátor verejného prístupu, ktorý člena triedy označí ako súkromne prístupného.
- Pomocou konštruktora triedy inicializujte premennú x na 10.
- Preťažte význam operátora ++.
- Operátor zvýši hodnotu premennej x o 2.
- Koniec preťažovacej časti operátora. Prevádzkovateľ dostal nové meno.
- Volanie funkcie Print ().
- Vytlačte hodnotu premennej x spolu s ďalším textom na konzole, keď sa volá funkcia Print ().
- Koniec tela funkcie Print ().
- Koniec triedy.
- Zavolajte funkciu main (). Do tejto funkcie by sa mala pridať programová logika.
- Vytvorte inštanciu triedy OperatorOverload s názvom ov.
- Týmto sa zavolá funkcia void operator ++ ().
- Na vyvolanie funkcie Print () použite postoj triedy OperatorOverload.
- Po úspešnom dokončení musí funkcia vrátiť hodnotu.
- Koniec tela funkcie main ().
Prí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ýkon:
Tu je snímka obrazovky s kódom:
Vysvetlenie kódu:
- Zahrnutie hlavičkového súboru iostream do nášho programu, aby sme mohli využívať jeho funkcie.
- Zahrňte do nášho programu std namespace, aby ste mohli používať jeho triedy bez toho, aby ste ich volali.
- Vytvorte triedu s názvom TestClass. {Označuje začiatok tela triedy.
- Použite modifikátor súkromného prístupu na označenie premenných ako súkromných, čo znamená, že k nim je možné získať prístup iba z triedy.
- Definujte dve celočíselné premenné, skutočnú a ďalšiu.
- Použite modifikátor verejného prístupu na označenie konštruktora ako verejného, čo znamená, že bude prístupný aj mimo triedy.
- Vytvorenie konštruktora triedy a inicializácia premenných.
- Inicializujte hodnotu premennej real.
- Inicializujte hodnotu premennej znova.
- Koniec tela konštruktéra.
- Prepísať význam operátora +.
- Vytvorte výsledok dátového typu typu TestClass.
- Použite operátor + s komplexnými číslami. Tento riadok pridá skutočnú časť čísla k skutočnej časti iného čísla.
- Použite operátor + s komplexnými číslami. Tento riadok pridá imaginárnu časť čísla k imaginárnej časti iného čísla.
- Po úspešnom vykonaní program vráti hodnotu výsledku premennej.
- Koniec definície nového významu operátora +, teda preťaženia.
- Zavolajte metódu print ().
- Po pridaní na konzolu vytlačte nové komplexné číslo.
- Koniec tela funkcie print ().
- Koniec tela triedy TestClass.
- Volanie funkcie main ().
- Je potrebné sčítať hodnoty skutočnej aj zložitej časti. Prvá časť C1 sa pridá k prvej časti C2, teda 9 + 4. Druhá časť C1 sa pridá k druhej časti c, teda 5 + 3.
- Vykonanie operácie pomocou operátora preťaženého + a uloženie výsledku do premennej c3.
- Vytlačí sa hodnota premennej c3 na konzole.
- Koniec tela hlavnej () funkcie.
Zhrnutie:
- V jednom rozsahu môžete určiť viac ako jeden význam pre operátor C ++.
- Toto sa nazýva preťaženie operátora.
- Preťaženie operátora poskytuje špeciálny význam operátora pre užívateľsky definovaný dátový typ.
- Väčšinu operátorov C ++ môžete predefinovať pomocou preťaženia operátora.
- Nie všetci operátori C ++ môžu byť preťažení.
- Na preťaženie operátora musí byť aspoň jeden z operandov objekt definovaný používateľom.
- Preťažiť môžu iba existujúce operátory. Nemôžete preťažiť nových operátorov.