Supraon; operátori spoplatňovania
Preťaženie operátorov umožňuje použitie operátorov štandardného jazyka pre ich vlastné triedy. To sa dá dosiahnuť definovaním funkcií so špeciálnym názvom (pomocou operátora kľúčových slov).

Existujú určité obmedzenia týkajúce sa preťaženia operátorov:
- základné charakteristiky operátorov nie je možné meniť (priorita, smer hodnotenia, asociatívnosť, mohutnosť)
- v porovnaní s tými, ktorí existujú v danom jazyku, nemožno zaviesť nijakých nových operátorov
- operátory pre základné typy nemožno preťažiť
- operátori nemôžu byť preťažení. . *:? a veľkosť
Operátorov môžu preťažovať členské funkcie v učebni alebo bežné funkcie. Ak sa používajú členské funkcie, počet funkčných parametrov je o 1 menší ako mohutnosť operátora (prvý operand sa považuje za ukazovateľ tohto ).
Podrobnosti nájdete v časti „Objektovo orientované programovanie v jazyku C ++“ na stranách 52-78.
Vybudujte si triedu Zbierka uložené vo forme jednoduchého reťazeného zoznamu na ukladanie celých čísel, aby bolo možné vykonať hlavné operácie pomocou operátorov, a umožniť prechádzanie kolekcie pomocou iterátora. Napíš hlavný program na demonštráciu fungovania triedy.
Aby sme to vyriešili, budeme potrebovať tri triedy:
- hlavná trieda zvaná Zbierka ktorá obsahuje vykonávanie operácií
- súkromná trieda Prikyv (zahrnuté v triede Zbierka), ktorý obsahuje údaje o uzle v zozname
- Iterátorová trieda (zahrnuté v triede Zbierka), ktorý umožňuje výčet prvkov zbierky
Implementácia tried v C ++ a hlavný testovací program:
* Implementuje kolekciu celých čísel ako zoznam
struct Node; // Oznámenie triedy uzlov (pre Iterator)
Collection (): head (NULL) <> // predvolený konštruktor
Collection (const Collection & c) // copy constructor
// prejsť zbierkou s iterátorom
pre (Iterátor i = c.Start (); i! = c.End (); i ++)
// a pridáme uzly do našej zbierky
const Collection & operator = (const Collection & c)
pre (Iterátor i = c.Start (); i! = c.End (); i ++)
// operátor pre priamy prístup k prvkom
int & operator [] (int k) konšt
// predpokladáme, že index je vo vnútri kolekcie
void Pridať (hodnota int) // pridať položku na koniec
// prípad 2: zoznam nie je prázdny
const Collection & operator + = (int hodnota)
void Insert (int poz, int val) // vložiť prvok
// prípad 1: vloženie na začiatok zbierky
// prípad 2: vloženie do zbierky
// hľadáme pozíciu vloženia
p-> Ďalej = nový Uzol (val, p-> Ďalej);
void Delete (int pos) // vymaže položku zo zadanej polohy
// prípad 1: vymazanie na začiatku zbierky
// prípad 2: vymazanie z vnútra kolekcie
void EmptyCollection () // vymaže všetky položky v kolekcii
const Collection & operator + = (const Collection & c)
pre (Iterátor i = c.Start (); i! = c.End (); i ++)
operátor const const + (const Collection & c)
pre (Iterátor i = c.Start (); i! = c.End (); i ++)
int ElementNumber () const // získa počet prvkov