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.

Kapcsolódó cikkek