Operator túlterhelés c

Operator túlterhelés c

Sok nyelven, operátorokat használunk programozás: legalább egy feladatot (= vagy hasonló). És aritmetikai operátorok (+ - * és / ..). A legtöbb statikusan típusos nyelv, ezek a piaci kapcsolódnak típusok. Például Java azzal a kiegészítéssel, a + operátor csak akkor lehetséges egész számok, lebegőpontos szám és szöveg. Ha meghatározzuk a osztályok matematikai objektumok, például a mátrixok, akkor végre egy módszert hozzáadásának őket, de akkor csak valami ehhez hasonlót: a = b.add (c).

A C ++, ez a korlátozás nincs jelen - azt meghaladhatják szinte bármilyen ismert operátor. Számtalan lehetőség van: az egyik lehet választani típuskombínációjú operandusok, az egyetlen korlátozás az, hogy szükség van a közölt legalább egy operandust felhasználó típusát. Ez meg egy új üzemeltető a beépített típusok, vagy felülírja a meglévő lehetetlen.

Ha a túlterhelés szereplők?

Ne feledje, a legfontosabb dolog: túlterhelés szereplők akkor és csak akkor van értelme. Azaz, ha az értelemben, túlterhelés nyilvánvaló, és nem hordoz rejtett meglepetéseket. A túlterhelt üzemeltetők kell fellépnie, ugyanúgy, mint az alapvető változatok. Természetesen kivételek megengedettek, de csak azokban az esetekben, amikor egyértelmű a magyarázat. Egy jó példa a szereplők <<и>> Normál iostream könyvtár. amelyek nyilvánvalóan nem úgy viselkedik, mint a normális Biteltolás szereplők.

Adunk jó és rossz példát operátor túlterhelés. A fent említett mátrixok összeadása - egyértelmű esetben. Itt túlterhelés hozzáadásával kezelő intuitív, és ha helyesen hajtják végre, magától értetődő:

Példák a gyenge túlterhelés hozzáadásával üzemeltető, hogy két típusú objektumok „játékos” a játék. Ez azt jelentette, az alkotó az osztály? Mi lesz az eredmény? Nem tudjuk, hogy mi teszi a műveletet, és ezért veszélyes, hogy ezt a szolgáltató.

Hogyan túlterhelés szereplők?

A túlterhelés hasonló funkciót túlterhelés különleges neveket. Valójában, amikor a fordító látja a kifejezés, amelyben van az üzemeltető és a felhasználó típusa, felváltja a kifejezés a megfelelő funkciót hívást egy túlterhelt operátor. A nevek kezdődik a kulcsszó operátor. majd kijelölése a megfelelő operátor. Ha a kijelölés nem tagja az adott szimbólum, például abban az esetben, működtetése az üzemeltető vagy a típusú memória kezelése (új. Törlése, stb), és kijelölésére szereplő szót kell szóközzel elválasztva operátor (operátor új), más esetekben a tér lehet hanyagolni (operátor + ).

A legtöbb piaci túlterhelését, mint egy osztály módszer, és egyszerű funkciókat, de van néhány kivétel. Amikor a túlterhelt operátor egy osztály módszer, hogy milyen az első operandust kell az osztály (mindig * ezt), és a második kell bejelenteni a paraméter listában. Ezen túlmenően, a módszerek üzemeltetők nem statikus, kivéve a memória kezelése szereplők.

Ha túlterheli az üzemben egy osztályban ő hozzáférést biztosít egy privát osztályú területeken, de a rejtett átalakítása az első argumentum nem érhető el. Ezért bináris funkció általában átvisszük egy ingyenes funkciókat. például:

Amikor egyoperandusú szereplők vannak terhelve formájában szabadon elérhető funkciók őket a rejtett átalakítása olyan érv, de ezek általában nem használják. Másrészt, az ingatlan kell egy bináris operátor. Ezért a legfontosabb tanácsom a következő:

Végrehajtása unáris operátorok és a bináris operátorok, mint például az „X =” formájában osztály módszerek, és más bináris üzemeltetők - formájában a szabad funkciók.

Ahol a piaci szereplők túlterhelt?

Mi lehet túlterhelni szinte minden szereplő C ++, figyelembe véve az alábbi kivételekkel és korlátozásokkal:

  • Nem lehet meghatározni egy új szolgáltató, például a szolgáltató **.
  • Az alábbi operátorok nem lehet túlterhelni:
    1. . (Ternáris operátor);
    2. . (Hozzáférés a beágyazott nevek);
    3. . (Hozzáférés a mezők);
    4. .* (Hozzáférés a mutató mező);
    5. sizeof. typeid üzemeltetők és a kaszt.
  • Az alábbi operátorok túlterhelt csak a módszer:
    1. = (Hozzárendelés);
    2. -> (Hozzáférés a mutató mező);
    3. () (A függvény hívás);
    4. [] (Index hozzáférés);
    5. -> * (Hozzáférés a pointer-to-mutatót a területen);
    6. memória átalakítás és vezérlő utasítások.
  • A több operandus, a végrehajtás sorrendje határozza meg, és asszociatív standard változat.
  • Legalább egy operandust kell lennie a felhasználó által definiált típus. Typedef nem vették figyelembe.

Fordítása a cikk «Kezelői túlterhelését: Az alapok»

Kapcsolódó cikkek