Operator túlterhelés, és a Delphi
Miután elolvasta a címet, akkor olvassa el ezt a jogot - a nyolcadik változata a Delphi (Delphi.NET) most igazán vált lehetővé, hogy túlterheli szereplők. A kiadás a Delphi.NET Object Pascal nyelven, sok nyelvi változások, a legjelentősebb, hiszen 1.0-s verzió. Ha látni őket igényelne egy külön könyvet, ezért ebben a cikkben fogjuk nézni, csak egy dolog, véleményem szerint, a legérdekesebb kiterjesztése a nyelvi - operátor túlterhelés.
Lehetőség automatikus csere a szolgáltatók a forráskód a program felhasználói függvények már régóta ismert, hogy a programozók írásban C ++ és C #. Most ezt a nagyszerű lehetőséget rendelkezésre áll, és a Delphi-programozók.
Általános szabályok
A Delphi.NET, ellentétben a C-szerű nyelv, mint a C ++ és C #, annak érdekében, hogy túlterheli a szükségességét, hogy végre egy funkció egy adott aláírás (és nem az üzemeltető szimbólum!) - azaz, hogy végre egy funkciót egy bizonyos név, szám és típusú paraméterek. Az 1. táblázat felsorolja a szereplők, ami lehetővé tette a kihagyást, és funkciókat aláírások, hogy végre kell hajtania.
1. táblázat listája üzemeltetők, amelyek egy esetleges túlterhelés Delphi.NET
Érdekes megjegyezni, hogy ezek a gyakran használt funkciók, mint a kerek és trunc vannak Delphi.NET szereplők, azaz a forma hívás nem különbözik a feladatukat, de túlterheltek.
Ezt követően, a program az alábbi kódot:
Ezután vesszük túlterhelés részletesebben a különböző üzemeltetői csoportok
A túlterhelés Egyoperandusú operátorok
Egyoperandusú szereplők kapnak a bemeneti egy érv, és ennek eredményeként visszatér egy példányát egy bizonyos típusú. Általában a típusú bemeneti paraméter, és az eredmény lehet az azonos típusú operátor.
Tekintsük a példát egy ilyen egyoperandusú operátor: Tegyük fel, hogy van egy típus: meghosszabbított vonal a lista formájában TMyStringList osztály osztálytól örökölt TStringList VCL könyvtár:
Mert ebben az osztályban, meg akarjuk határozni a számtani tagadás művelete „-”. Hagyja, hogy a szolgáltató fog átsorrendezőegységből tételek listája fordított sorrendben, azaz az első elem lesz az utolsó és a második - az utolsó előtti, stb Ennek hatására az üzemeltető vissza kell térnie az új találati listát.
Megvalósítása egy ilyen üzemben van, hogy állapítsa meg a következő osztály módszer:
Ennek bizonyítására Például hozzon létre egy kis konzol alkalmazás. Teljes forráskód a következő:
A túlterhelés bináris operátorok
A bináris operátor egy olyan funkció, amely két paramétert, és visszaadja az eredményt, mint például egy bizonyos típusú. Ami egyváltozós szereplők, a típusú bemeneti paraméterek és visszatérési típusát az üzemeltető is ugyanaz.
Vegyünk egy példát egy ilyen bináris operátor: a mi osztály TMyStringList meghatározza az üzemeltető aritmetikai operátor egy sor „+”, amely ezt a sort a végén a lista.
Megvalósítása egy ilyen üzemben van, hogy állapítsa meg a következő módszerrel:
A fenti példában, az illusztráció, a konverzió végrehajtása a primitív típusok (string, integer, logikai érték), egy valós alkalmazás hozza egy tetszőleges osztály. Például egy példánya hozza TAccount (bankszámla) a TConractor típus (partner) visszatérhet a számlatulajdonos, és hogy a valós típusú visszatér a mérleg.
Túlterhelés típusú öntött szereplők egy nagyon erős mechanizmust, és meg kell használni óvatosan, gondos tervezés egy lehetséges átalakítás - különösen az implicit konverziót. Egyébként ez ahhoz vezethet, hogy nehéz felismerni a hibákat.
Speciális funkciók
A következtetés az a történet, amit el akartam mondani a izgalmas lehetőségeket, amelyek üzemeltető túlterhelés.
Másolatot készíthet kivitelező
Az ötlet az, hogy meghatározzák a konverziós operátor explicit esetben az osztály, hogy ugyanabba az osztályba.
A túlterhelés az értékadó operátor
Ha jobban megnézed figyelte operátorok listáját, amelyek túlterhelés, kérjük, vegye figyelembe, hogy nincs értékadó operátor. Sőt, túlterhelés az értékadó operátor „: =” tilos.
Azonban az egyik esetben ez megvalósítható: ha osztályok, mindig csak egy példány. Egy példa az ilyen esetben egy változó típusú Application TApplication VCL könyvtár. Lehet csak az egyik esetben az osztály TApplication, és ez egy globális változó; annak létrehozását és megsemmisítése valósul a VCL könyvtár és automatikusan.
Tehát, az ilyen tárgyak lehetséges implicit túlterhelés az értékadó operátor.
Ehhez például az osztály deklarált statikus mágneses tér az azonos osztályú, és blokkolja az üzemeltető, hogy a kívánt típust. Létrehozása egy ilyen területen lehetséges az osztályban kivitelező. Ezt követően lehetővé válik, hogy felülbírálja a hozzárendelése egy tetszőleges például ennek az osztálynak, hogy az aktuális példányt.
Hadd illusztráljam a fenti példa: a mi megvalósított alkalmazás nyilvántartást ügyletek formájában egy szöveges fájl (log-file). Ez a napló-fájlnak van, mint egy osztály Logger. Mindig csak egy példányát az osztályban, és minden alkalmazás modulok fordul, hogy újabb üzenetet rögzíteni.
Most válik lehet rendelni a műveletet vonal (string) változó Logger.
következtetés
Megvizsgáltuk példákat operátor túlterhelés Delphi.NET. Rendeltetésszerű használata erőteljes funkció lehetővé teszi, hogy a kódot olvashatóbbá és elősegítik annak megértését, más fejlesztők és további támogatást.
Minden a fenti kódot példákat lehet letölteni ezt a linket.