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

szolgáltatók

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