Programozás és c

2. rész Absztrakt osztályok és használati példa

Folytassuk megkezdte az első része a cikket vizsgálata a virtuális függvények. Ebben az időben, azt javasoljuk, hogy egy konkrét példát. Tegyük fel, hogy egy nagyon egyszerű, de teljesen működőképes, és lehetővé teszi, hogy az összes részletet, ami már olvasni.
De először egy kis elmélet, amely nem szerepel az első részben.

Pure virtuális függvények

Azt gondolnánk, hogy az összes többi funkciót a „piszkos”! Nem, persze. Net - ebben az esetben azt jelenti, szó szerint üres függvény. Lássuk, mi a tisztán virtuális függvény.

Mint látható, az egyetlen különbség csak az, hogy volt egy „= 0” design, amely az úgynevezett „tiszta adja meg.” Tisztán virtuális függvény nem semmi, és nem érhető el a hívásokat. A cél -, hogy alapjául szolgál (ha akarsz egy sablon) a csere funkciók származtatott osztályok. Egy osztály, hogy tartalmaz legalább egy tisztán virtuális függvény nevezzük egy absztrakt osztály. Miért elvont? Mivel létre független objektumok ennek az osztálynak nem lehet. Ez csak egy üres, a többi osztályok. A mechanizmus absztrakt osztályok célja, hogy képviselje az általános fogalmak, amelyeket aztán kéne megadni. Ezek az általános fogalmak általában nem lehet közvetlenül felhasználni, de lehet ezek alapján, hogy az alapján, hogy építsenek származékok magánórákat képes leírni konkrét tárgyakat.
Példa? Kérem.
Az összes állat a viselkedésükben funkciók, mint például a „van”, „inni”, „alvó”, „hogy egy hang.” Logikus, hogy definiálunk egy alap osztályt, ami azonnal be mindezen funkciókat, és azokat tisztán virtuális. És akkor ez az osztály megjelenítéséhez osztályok, amelyek leírják adott állat (vagy faj), annak sajátos viselkedését. A bázis osztály ugyanakkor igazán elvont. Elvégre ő nem írja le többé-kevésbé specifikus állat (még állatfajok). Ez lehet egy hal és egy madár - két különböző dolog!
Mint minden osztály egy absztrakt osztály van egy külön meghatározott kivitelező. Tervezői, akkor hívja módszerek az osztályban. De a fellebbezést a tervező a függvénye virtuális hibához vezet futási időben.
Összehasonlítva a hagyományos osztályok, absztrakt osztályok „korlátozott jogokat”. Mint már említettük, lehetetlen, hogy hozzon létre egy objektumot egy absztrakt osztály. Az absztrakt osztály nem lehet használni, hogy meghatározza, hogy milyen típusú paraméter szemüveg, vagy egy olyan típusú visszatérési érték. Nem lehet használni, ha explicit öntött. De akkor meg linkeket és mutatókat absztrakt osztályok.
Mindez, vagy majdnem minden, most egy példát.

Visszatérve a példa a militáns az első rész, azt kell mondanom, hogy ebben az esetben ez teljesen békés, és még „gyerek” példa. By the way, annak ellenére, hogy minden egyszerűsége, az is lehet az alapja egy egyszerű oktatási játékok gyerekeknek „nagyon fiatal.”
Szóval Ennek alapja az a gondolat megismerése az állatvilágban. (Cool megadott ...) Ez nem titok (remélem), hogy minden állat hangokat. Sőt, a különböző és nagyon jellegzetes a maga nemében. Rajta és a játék.
Egyszerűsítése érdekében a példa arra korlátozódik, hogy a leírás egyes állat számára felhasználónév és közzéteszi szokásos állati hangok. Nos, a fő (és, sajnos, az egyetlen) alkalom program megjeleníti becenevét tartalmazó lista állatok és bemutatása a zajkibocsátás.

Az alap osztály, építettünk egy absztrakt osztály Animal. Ő az egyetlen tagja adatok címe, amely leírja az állat becenevet. Ez egyértelműen meghatározott kivitelező, amely kijelöli az állat a „név”. És az egyetlen tisztán virtuális függvény beszél (), amely leírja, hogy milyen hangokat bocsát ki az állatot.
az összes többi származik ebben az osztályban. Kivéve egy dolgot. Class „oroszlán” származik az osztály „macska” (elvégre az oroszlánok is egy macska!). Ez úgy történik, hogy bizonyítsa a finomságok virtuális függvények. De ez az osztály egy kicsit később. És most - hogyan működik a program.
Minden származtatott osztályokban leírt saját csere virtuális függvény beszél (), amely kiírja a képernyőre, milyen hangokat bocsát ki az adott állat.
A fő szerve a program azt jelentette be egy sor állatok [4] típus Animal * mutatók. Azonnal hozzon létre egy dinamikus objektumok és osztályok tele egy sor mutató. De a ciklus () a megjelölés csak a virtuális függvény beszél ().
Ha még nem tett újabb hibákat, amikor belépnek a programot, a kijelző így néz ki:

Ez az eset áll fenn, amikor a helyettesítő deklarált virtuális függvény azonos visszatérő típus, de más-más paramétereket. Hogy abban az esetben a hangok, amely közzéteszi az oroszlán beszél () függvény átadhatók paraméterként? A feltételezés az „Milyen helyet egy hangot:” én elutasította azonnal és visszavonhatatlanul. Tegyük fel, hogy ez függ a napszaktól, hogy a „ha”. Nos, például közelebb az éjszaka az oroszlán akart aludni, és elkezdett ásít. Ezért ebben az esetben beszélni funkció (int mikor) opciót, hogy mikor át, ez igaz, hogy nem használják, de ez nem számít. Funkciót, akkor is működni fog.
Nos, ha a program fordítása, meg kell futtatni. Mi történt? A következőket kell tartalmaznia:

Wow! Úgy tűnik, hogy valami nincs rendben! Oroszlán akkor már nem üvölt, vagy ásít, és aranyos meows. Miért lenne? De a fordítási figyelmeztetés - funkció 'Lion :: beszél (int)' nyersbőr (felülbírálja) virtuális függvény 'Cat :: beszél ()'. Ez egy újabb funkció! Ezért, ha egy adott osztály nincs jól definiált virtuális függvény, akkor a virtuális függvény pointer beszél () a bázis osztály. És ebben az esetben, az alap a Lion osztály a Cat osztályban. Itt van egy oroszlán és nyávogott!

Egészen addig, amíg ez minden. Megvitatása az elmélet virtuális függvények általános esetben, végünk. Az igazság az, hogy még nem nézett egy csomó más dolgot. De ez a „nagyon finom finomságot.” Ez lehet levelet egész könyvet.
A következő részben megpróbálunk fontolóra egy kissé bonyolultabb időben. Lássuk, mi a virtuális destruktor, miért van szükség, és hogyan kell kezelni őket.

Mikor ezt írom, az alábbi könyvek:

Ha bármilyen kérdése van - írj, mi meg fogjuk vizsgálni.

<<ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ

Kapcsolódó cikkek