Supraоnc; töltési szolgáltatók
Az operátorok túlterhelése lehetővé teszi a szabványos nyelvi operátorok használatát saját osztályaikban. Ezt úgy tehetjük meg, hogy speciális névvel definiáljuk a függvényeket (a kulcsszó operátor segítségével).

Néhány korlátozás vonatkozik az üzemeltetők túlterhelésére:
- az operátorok alapvető jellemzői nem módosíthatók (prioritás, értékelési irány, asszociativitás, kardinalitás)
- a nyelven létezőkhöz képest nem lehet új operátorokat bevezetni
- az operátorokat nem lehet túlterhelni az alaptípusoknál
- üzemeltetőket nem lehet túlterhelni. . *:? és mérete
Az operátorokat túlterhelhetik az osztálytermi tagfunkciók vagy a normál funkciók. Tagfüggvények használata esetén a függvényparaméterek száma 1-gyel kevesebb, mint az operátor kardinalitása (az első operandus tekinthető itt mutatónak) ).
További részletek: „Objektumorientált programozás a C ++ nyelven” az 52-78. Oldalon.
Építsen egy Gyűjtemény osztályt egyszerű láncolt lista formájában tárolva, egész számok tárolására, hogy lehetővé váljon a fő műveletek végrehajtása operátorok használatával, és hogy a gyűjtemény áthaladhasson egy iterátor segítségével. Írjon egy fő programot az osztály működésének bemutatására.
Megoldásához három osztályra lesz szükségünk:
- a főosztály a Gyűjtemény nevet viselte amely a műveletek végrehajtását tartalmazza
- magánosztály Nod (a Gyűjtemény osztályba tartozik), amely a listában szereplő csomópont adatait tartalmazza
- Iterátor osztály (a Gyűjtemény osztályba tartozik), amely lehetővé teszi a gyűjtemény elemeinek felsorolását
Az osztályok és a fő tesztprogram C ++ megvalósítása:
* Egész számok gyűjteményét valósítja meg listaként
struct Csomópont; // Node osztály bejelentése (az Iterator számára)
Gyűjtemény (): head (NULL) <> // alapértelmezett konstruktor
Gyűjtemény (const Gyűjtemény & c) // másoló szerkesztő
// iterátorral megy végig a gyűjteményen
mert (Iterator i = c. Start (); i! = c.End (); i ++)
// és hozzáadjuk a gyűjteményünk csomópontjait
const Gyűjtemény & operátor = (const Gyűjtemény & c)
mert (Iterator i = c. Start (); i! = c.End (); i ++)
// az elemekhez való közvetlen hozzáférés operátora
int & operátor [] (int k) const
// feltételezzük, hogy az index a gyűjteményen belül van
void Hozzáadás (int érték) // elem hozzáadása a végén
// 2. eset: a lista nem üres
const Gyűjtemény és operátor + = (int érték)
void Insert (int poz, int val) // elem beillesztése
// 1. eset: beszúrás a gyűjtemény elejére
// 2. eset: beillesztés a gyűjtemény belsejébe
// keressük a beszúrási helyzetet
p-> Next = új Csomópont (val, p-> Next);
void Törlés (int pos) // elem törlése a megadott pozícióból
// 1. eset: törlés a gyűjtemény elején
// 2. eset: törlés a gyűjtemény belsejéből
void EmptyCollection () // a gyűjtemény összes elemének törlése
const Gyűjtemény és operátor + = (const Gyűjtemény & c)
mert (Iterator i = c. Start (); i! = c.End (); i ++)
const Gyűjtemény operátor + (const Gyűjtemény & c)
mert (Iterator i = c. Start (); i! = c.End (); i ++)
int ElementNumber () const // megkapja az elemek számát