operátor túlterhelés

16.1. Általános szabályok

A C ++ programozási nyelv üzemeltetők kezelik funkciókat, amelyek a következő prototípus:

imya_operatora operátor típusa (lista);

Itt az üzemeltető - a kulcsszó. Ezért a szolgáltatók, valamint a funkciók, a túlterhelt. Átrakodott majdnem minden piaci, kivéve azokat az eseteket, alábbiak szerint:

 nem terheli az alábbi szereplők:

. - pont, a szolgáltatóknak, hogy egy osztály tagja;

.* - üzemeltető hozzáférést egy osztály tagja a mutató;

. - hatálya felbontás üzemben;

 előfeldolgozó nem lehet túlterhelni szereplők:

# - átalakítani a karakterláncot;

 nem terheli szereplők sizeof és typeof;

 túlterhelés üzemeltetői nem tudja konvertálni a adattípusok:

static_cast. const_cast. reinterpret_cast. dynamic_cast.

A túlterhelés szereplők meg kell felelniük az alábbi követelményeknek:

 nem vezetnek be új szereplők;

 nem túlterhelt operátorok beépített adattípusokat paramétereit, típusát, legalább egy paramétert kell túlterhelt operátor osztály;

 üzemeltető nem tudja megváltoztatni a paraméterek száma;

 asszociatív túlterhelt operátorok nem változott;

 prioritások túlterhelt szereplők nem változnak;

 üzemeltető nem rendelkezik alapértelmezett érveket, kivéve a függvényhívás operátor ();

 üzemeltető határozatlan paraméterek számát, kivéve a függvényhívás operátor ().

A túlterhelt üzemeltetők számára engedélyezett definiálható osztály tagjai és a függvényében nem tagjai az osztály. Egy operátor túlterhelt többször. Ha az üzemben túlterhelt tagjaként az osztály, akkor nem lehet statikus specifikátor és az első operandus az alapértelmezett objektum az osztály, amelyre ezen szolgáltató neve. Ebben az esetben az első érv típusú átalakítás, így a kezelő típusától az első paraméter nem termelődik lehetetlensége miatt annak hatékony végrehajtását. Amikor kiválasztod, hogy hogyan túlterheli az üzemben tartó vegye figyelembe a szemantika, azaz a. E. Jelentése. Jó lenne, ha üzemeltető túlterhelés figyelembe kell venni azt a tényt, hogy ezek többnyire végre algebrai műveletek tárgyakat, és így folyamatosan algebrai természete miatt a piaci szereplők.

Túlterhelés egyváltozós és bináris operátorok fogja vizsgálni a példáját Bool osztályban. amelyek meghatározása listán látható 16.1.

Listing 16.1. Az osztály definíciója páros számok

#if! meghatározott BOOL #define BOOL

// unáris operátorok logikai összeadás és szorzás

Bool operátor + = (const Bool b); Bool operátor * = (const Bool b);

// konverziós operátor típus

üzemeltető bool (void) const;

// egyváltozós logikai tagadás szereplő ismerősnek Bool üzemeltető! (Const Bool b);

// bináris operátorok logikai összeadás és a szorzás barátja Bool operátorokat + (const Bool b1, const Bool b2); barátja Bool operátor * (const Bool b1, const Bool b2);

// bináris összehasonlító operátorok

barátja Bool operátor == (const Bool b1, const Bool b2); barátja Bool operátor! = (const Bool b1, const Bool b2);

barátja std :: istream_FAR operátor >> (std :: istream_FAR -ban, Bool b); barátja std :: ostream operátor <<(std::ostream& out,

const Bool b);

Végrehajtása túlterhelt szereplők kapnak a következő részekben. Ugyanakkor megjegyezzük, hogy a legtöbb a szóban forgó üzemeltetőket egy egyszerű végrehajtását. Ezért ezek megadható közvetlenül a szervezetben az osztály, mint a beépített funkciókat.

Vegye figyelembe, hogy túlterhelt operátorok lehet hivatkozni kétféleképpen kifejezetten függvényében, vagy implicit módon az üzemeltető jelölést. Például, több mint Bool típusú objektumok hajtsa végre a következő műveleteket: