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:
- . (Ternáris operátor);
- . (Hozzáférés a beágyazott nevek);
- . (Hozzáférés a mezők);
- .* (Hozzáférés a mutató mező);
- sizeof. typeid üzemeltetők és a kaszt.
- Az alábbi operátorok túlterhelt csak a módszer:
- = (Hozzárendelés);
- -> (Hozzáférés a mutató mező);
- () (A függvény hívás);
- [] (Index hozzáférés);
- -> * (Hozzáférés a pointer-to-mutatót a területen);
- 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»