Virtuális módszer - ez
Virtuális módszer (virtuális funkció) - egy objektum-orientált programozási módszerek (funkciók) az osztály. ami felübírálható a származtatott osztályok, így a konkrét megvalósítására a módszer hívás kerül meghatározásra futási időben. Így a programozó nem kell tudni a pontos típusa a tárgy dolgozni őket a virtuális módszerek: elég csak tudni, hogy az objektum tartozik egy osztály vagy alosztály, ahol az eljárást nyilvánították.
Virtuális módszerek - az egyik legfontosabb technikák végrehajtása polimorfizmus. Ezek lehetővé teszik, hogy hozzon létre egy közös kód, amely képes együttműködni mind bázis-osztályú objektumokat, és semmilyen tárgyat annak származtatott osztály. Amikor ez alap osztály meghatároz egy módszert dolgozó tárgyak, vagy annak bármely utódai nyújthat konkrét megvalósítása ennek az eljárásnak. Bizonyos programozási nyelvek. például a Java. nincs fogalma a virtuális módszer, ez a koncepció kell használni, csak a nyelvet, amelyen a szülő osztály módszerek nem felülírható alapból, csak a segítségével néhány kiegészítő kulcsszavakat. Bizonyos (például Python), minden módszer - virtuális.
Az alap osztály nem tud végrehajtása virtuális módszer, de csak nyilatkozni a létezését. Az ilyen módszerek alkalmazása nélkül az úgynevezett „tiszta virtuális” (az angol fordítás. Tiszta virtuális) vagy absztrakt. Az osztály, amely legalább az egyik ilyen módszer lenne túl elvont. A cél ebben az osztályban nem lehet létrehozni (egyes nyelvek engedélyezett, de absztrakt metódus hívás hibát eredményez). Örökösei egy absztrakt osztály kell adnia a végrehajtás valamennyi elméleti módszerek, illetve azok, viszont lesz absztrakt osztályok.
Az egyes osztályok, amely legalább egy virtuális metódus létrehoz egy virtuális módszer táblázatot. Minden objektum tárolja a mutatót az asztalra a saját kategóriájában. Virtuális metódushívás használják ezt a mechanizmust: az objektum venni a mutatót a virtuális módszer táblázatot, és azt, hogy egy fix eltolás, - egy mutatót a végrehajtásához alkalmazott módszer az osztály. Ha többszörös öröklés vagy interfészek helyzet kissé bonyolult annak a ténynek köszönhető, hogy a virtuális módszer táblázatot válik nemlineáris.
Példa virtuális funkció C ++
Példa a C ++. szemléltetve a különbséget a virtuális funkciók nem virtuális:
Ebben a példában az ős osztály határozza meg a két funkciót, egyikük virtuális, a másik - nem. Leszármazott osztály felülbírálja mindkét funkciót. Azonban úgy tűnik, ugyanazt a kezelést a funkciókat ad a különböző eredményeket. A program kimenete biztosítja az alábbiakat:
Azaz, abban az esetben a virtuális függvények, hogy meghatározza a függvény végrehajtása használja az információt az objektum típusát és az úgynevezett „helyes” végrehajtását, tekintet nélkül az index típusát. Ha telefonál, nem virtuális függvény, a fordító által vezérelt egy mutatót vagy referencia típusú, úgynevezett két különböző megvalósítások function2 (). annak ellenére, hogy az alkalmazott egy és ugyanazon tárgy.
Meg kell jegyezni, hogy a C ++, akkor, hogy ha szükséges, meg egy meghatározott végrehajtását a virtuális függvény okozza valójában a fizikai világban:
példánk megmutatja ős :: function1 (). figyelmen kívül hagyva az objektum típusát.
Példa virtuális funkció Delphi
Nyelv Object Pascal. használt Delphi, tedd is támogatja polimorfizmus. Vegyük ezt a példát:
Állapítsa két osztály. Ancestor (ős):
és utódainak (leszármazottja):
Mint látható az osztályban ős megadott virtuális funkció - VirtualProcedure. Kihasználni az előnyeit polimorfizmus, meg kell vágni a gyerek.
A végrehajtás a következő:
Lássuk, hogyan működik ez:
Megjegyezzük, hogy a szakasz var bejelentettük két tárgy MyObject1 és MyObject2 típusú TAncestor. És ha létre MyObject1 létre, TAncestor. valamint a MyObject2 TDescendant. Ez az, amit látni fogjuk, ha rákattint a gombra BitBtn1:
- Ancestor statikus eljárás.
- Őse virtuális eljárást.
- Ancestor statikus eljárás.
- Leszármazottja felülírás eljárást.
Mert MyObject1 minden világos, egyszerűen hívja ezeket az eljárásokat. De MyObject2 nem.
Hívjon MyObject2.StaticProcedure; vezetett a megjelenése «ős statikus eljárás.». Miután bejelentette MyObject2: TAncestor. így az eljárás StaticProcedure okozták; Class TAncestor.
De a kihívás MyObject2.VirtualProcedure; VirtualProcedure vezetett a hívást; végre a leszármazottja (TDescendant). Ez azért történt, mert MyObject2 jött létre nem mint TAncestor. de TDescendant. MyObject2: = TDescendant.Create;. És virtuális módszer VirtualProcdure blokkolva volt.
A Delphi polimorfizmus van megvalósítva egy úgynevezett virtuális módszer táblázatot (vagy VMT).
Elég gyakran elfelejti virtuális módszerek átfedésben a kulcsszó felülírás. Ez vezet a lezárás módszerrel. Ebben az esetben, a helyettesítő módszerek VMT nem fordul elő, és a kívánt funkcionalitást kapjuk.
Ezt a hibát követjük a fordítóprogram, amely figyelmeztetést ad.
Hívjon az őse során kényszerítjük
Néha meg kell hívni az ős módszer nyomós.
Állapítsa két osztály. Ancestor (ős):
és utódainak (leszármazottja):
Fellebbezés az ős eljárás végrehajtását a kulcsszó «örökölt»
Érdemes megjegyezni, hogy a Delphi destructor szükségszerűen átfedi - «állítás» -, és tartalmaz egy destruktor hívás őse
A C ++, nem kell hívni a konstruktor és destruktor őse, a romboló legyen virtuális. Ősök okozhat destruktorok automatikusan. Hívni az előd módszer, kifejezetten meg kell hívni a módszer:
Hívni a szülő konstruktor kell határozni, hogy a kivitelező:
Nézze meg, mi a „virtuális” módszer más szótárak:
Virtuális forrás - Ez a cikk hiányzik hivatkozások információforrások. Az információ legyen ellenőrizhető, egyébként megkérdőjelezhető, és eltávolítjuk. Akkor ... Wikipedia
Kivonat módszer - Ezt a cikket kell vikifitsirovat. Kérjük, hogy a szabályok szerint a regisztrációs papírokat. Absztrakt módszer (vagy tisztán virtuális módszer (tisztán virtuális módszert gyakran helytelenül fordítják tisztán virtuális módszer)) A ... Wikipedia
Gyár (tervezési minta) - tervezési minta gyári módszer Gyár eljárás típusa: generálunk leírt Design Patterns Igen gyári módszer (Gyár Eng.) Létrehozási minta, amely egy interfészt biztosít alosztályok épít ... Wikipedia
Gyár - (angol Gyár.) Létrehozási minta, amely egy interfésze, alosztályok esetben egy osztály. Abban az időben az örökösök, hogy melyik osztály példányosíthat. Más szóval, a gyár ... ... Wikipedia
Intelligens állandó virtuális áramkör - létrehozását kommunikációs módszerrel hibrid logikai kapcsolatok létrehozott kombinációja révén a két állandó virtuális áramkörök (PVC) és kapcsolt (SVC). A hálózati rendszergazda beállítja a kapcsolatokat, de ... ... Referencia műszaki fordító
Virtuális funkció - virtuális módszer (virtuális függvény) egy objektum-orientált programozási módszerek (funkciók) az osztály, hogy felül lehet bírálni a osztályainak örökösök úgy, hogy egy adott eljárás megvalósítása hívni fogja meghatározni idején ... ... Wikipedia
Összehasonlítása C Sharp és Java - A helyes címe ennek a cikknek összehasonlítása a C # és Java. Ő mutatja rosszul a technikai korlátok miatt. Összehasonlítása programozási nyelvek általános összehasonlítás Alapvető szintaxis Basic utasítások tömbök asszociatív tömbök tranzakciók ... ... Wikipedia
- Virtuális módszer. Dzhessi Rassel. Ez a könyv lesz összhangban a rendelését Technology Print-on-Demand technológiát. High Quality Content Wikipedia cikket! Virtuális módszer (virtuális függvény) - ... Tovább Vásárlás 1254 rubelt
- Gyár eljárás (tervezési minta). Dzhessi Rassel. Ez a könyv lesz összhangban a rendelését Technology Print-on-Demand technológiát. High Quality Content Wikipedia cikket! Gyár (angol Gyár.) - generál ... Tovább Vásárlás 1125 rubelt
- Tempo-világban. Érzékelhető sebesség és időskálán. Alyushin AL Rod számára ez a könyv a koncepció, amely szerint az adatáramlást a érzékek feldolgozása az agyban diszkrét formában, formájában neurofiziológiai keretben. Ennek alapján az ... Tovább Vásárlás 348 rubelt