Túlterhelése 49. és szolgáltatók c
Jó napot, kedves olvasók!
Amikor kezdtem tanulmányozásával C ++, már sok kérdés, hogy néha nem tudja, hogy gyorsan megtalálja a választ. Sem kivétel, és egy ilyen téma, mint operátor túlterhelés. Most, hogy már értem ebben a témában, azt akarom, hogy segítsen másoknak, hogy pont az i.
Mi a túlterhelés?
Tegyük fel, hogy hozzon létre az osztály vagy struktúra, akkor azt kell leírni, hogy egy vektor 3-dimenziós térben:
Most létre 3 tárgy ennek szerkezete:
És azt akarja, prirovnyat objektum objektum v2 v1 írd:
Minden működik, de egy példa a vektor nagyon leegyszerűsített, talán van egy ilyen szerkezet, amelyben nem szabad vakon másolni az összes érték az egyik tárgy a másikra (ez az alapértelmezett), és azokat valamilyen manipuláció. Például ne másolja az utolsó részt. Ha a program nem tud róla? Szükséges világos utasításokat, hogy fog teljesíteni.
Ezért kell, hogy terhelje az értékadó operátor (=).
Általános információk operátor túlterhelés
Ehhez adjuk hozzá a mi szerkezet túlterhelés:
Most, a fenti kódot, már meg, hogy a feladat a másolni kívánt az x és y változót. és z értéke nulla.
De ez a transzfer messze nem tökéletes, képzeljük el, hogy a szerkezet nem tartalmaz három változó int típusú, és sok más osztályba tartozó tárgyak, ebben az esetben ez a lehetőség túlterhelés fog működni meglehetősen lassan.
- Az első dolog, amit tehetünk, hogy küldje meg a túlterhelés módszer nem az egész objektumot, és egy utalás arra a helyre, ahol a tárolás:
Elhaladva egy objektum hivatkozással. nincs elosztását az objektum (mondjuk 128 byte), a másolási művelet, a memória csak elkülönített egy mutatót memória cella, amellyel dolgozunk, és ez körülbelül 4-8 bájt. Így a mű egy tárgy a vonalon.
például:
Természetesen szinte senki épeszű nem fog ilyen nyilvánvaló manipuláció. Mégis, hogy biztonságos legyen, még akkor is megszünteti a lehetőségét egy ilyen változás.
Ehhez csak meg kell hozzá, éppen mielőtt a const érv, ezért rámutatnak, hogy a módszer nem változott az objektumban.
De amikor visszatér hivatkozásként jelenhet meg bizonyos problémákat.
Nem írunk ezt a kifejezést: v1 = (v2 + v3);
Egy kis kitérő a visszatérés:
Amikor tanultam a túlterhelés, nem értem:
Az a tény, hogy az összes művelet muszáj külön és kifejezetten a szervezetben a módszer. Mit jelent, hogy írjon: this-> x = v.x stb
De akkor miért tér vissza, akkor vissza? Sőt, vissza ebben a példában játszik inkább formális szerepet, akkor is csinálni nélküle:
És ez a kód elég munka. mert Mindössze annyit kell tennie, azt jelzik a szervezetben a módszer.
De ebben az esetben nem kaptunk, hogy egy ilyen rekord:
Retreat 2 (nem kell csinálni):
Most, hogy tudod, hogy a különbség művelet visszatérési és irányítja a műveletet, tudjuk írni a következő kódot:
Annak érdekében, hogy megvalósítsa a horror definiáljuk túlterhelés az alábbiak szerint:
Ehhez hozzá ez az állapot:
Közötti különbségek egyváltozós és bináris operátorok
Egyoperandusú szereplők - ezek üzemeltetői, amely akkor aktiválódik, csak egy tárgy, amelyre alkalmazni minden változást
Binary szereplők - dolgozik 2 tárgyak
Túlterhelés a test és a test az osztály
Miért operátor túlterhelés barátságos funkciók (barát)?
Ha nem nélkülözheti barátságos jellegét a szolgáltató túlterhelés?
Hiba történik, a következő ok miatt, a szerkezet Vector2 már túlterhelt a + operátor, amely az érték a jobb tart Vector3 típusú, így az első opció működik. De a második esetben, meg kell írni, hogy túlterheli már Vector3 szerkezet, nem 2. Annak érdekében, hogy ne kerüljön az osztály megvalósítása Vector3, tudunk írni egy felhasználóbarát funkció:
Példák túlterhelés különböző szereplők némi magyarázatot
Példa túlterhelés bináris +, -, *, /,%
Példa túlterhelés postfix növelő és csökkentő (var ++, var--)
Példa túlterhelés előtag formák növelő és csökkentő (++ var, --var)
A túlterhelés aritmetikai műveletek tárgyakkal más osztályokba
Túlterhelés egyváltozós plusz (+)
Túlterhelés unary mínusz (-)
Példa túlterhelés vegyületet hozzárendelési műveletek + = - =, =, / =,% =
Egy jó példa a túlterhelés összehasonlító operátorok ==. =,>, <,>= <=
Példa túlterhelés typecasting műveletek (típus)
Példa terhelje logikai operátorok. , ||
Példa terhelje Bitorientált operátorok
Példa túlterhelés bitenkénti vegyületet hozzárendelés =, | =, ^ =, <<=,>> =
Egy példa az üzemeltető túlterhelés munka mutatók, és az osztály tagjai [] () *, -> -> *
Nem látok okot arra, hogy túlterheli (* -> -> *), úgy, hogy az alábbi példák nem.
Hogyan túlterhelés new és delete. példák:
Operator túlterhelése vessző,
Figyelem! Nem tévesztendő össze a vessző operátor továbbítja a jelet! (Vector3 var1, var2;)