Kezdőoldal » Számítástechnika » Programozás » Mi az a többalakúság?

Mi az a többalakúság?

Figyelt kérdés
C++
2012. nov. 18. 11:51
 1/9 anonim ***** válasza:

[link]


Elég jó a megfogalmazás itt erre.

2012. nov. 18. 11:54
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:

Hát nem nagyon értem...

Próbálgatom...

2012. nov. 18. 11:59
 3/9 anonim ***** válasza:
Ha például van egy Alkalmazottak osztály, és innen leszármaztatjuk a Fonok osztályt, akkor az Alkalmazottakat tartalmazó tömbbe betehetünk Fonok osztályú objektumokat is. Tehát a főnököt együtt lehet kezelni a beosztottjaival.
2012. nov. 18. 17:51
Hasznos számodra ez a válasz?
 4/9 anonim ***** válasza:
Jobb példa erre : Legyen az emlősök osztály ebből származik a kutya is meg a ló is. Mivel ugyan abból az ősosztályból származnak vannak közös metódusa pl az alszik metódus. Egy kutya nem úgy alszik mint egy ló, egész máshogy pl a ló állva alszik ... alakilag és lényegében ugyan azt csinálja mind2-re az alszik metódus.
2012. nov. 18. 18:42
Hasznos számodra ez a válasz?
 5/9 A kérdező kommentje:
Köszönök mindent! Most már jobban értem! Amúgy mit csinálnak a virtuális függvények? Mostani tudomásom szerint ha van 2 külön (az egy ős, a másik leszármaztatott) osztály, és van az egyiken belül egy virtuális OSZTALY nevű metódus (természetesen void visszatérési típusú), és a másik tagfüggvényben egy ugyan ilyen nevű (ami már nem virtuális) metódus, akkor a nem virtuális metódus lesz kiírva, mert a virtual kulcsszó jelzi, hogy ezt "hagy későbbre!".
2012. nov. 18. 18:50
 6/9 A kérdező kommentje:

Utóirat:

"kiirva" helyett, megvalósítva...

2012. nov. 18. 18:51
 7/9 anonim ***** válasza:

A virtual kulcsszó arra utal hogy nem fordítási időbe dől el a hogy az adott objektumhoz melyik metódus kerül (a virtualra vonatkozik) hanem futási időbe, ehhez virtuális függvénytáblával van megvalósítva, ezek vannak karbantartva a háttérbe, ekkor az osztály minden egyes példányához tartozik egy ilyen. Akár mindig kiírhatjuk mindig a virtual kulcsszót, de ez plussz overhead.

---------------

Az objektumra legálisan hivatkozhatunk ősosztályaként (ez nem mindig igaz, bonyolultabb ennél a c++), pl a kutyát kezelhetem úgy mint emlőst anélkül hogy tudnám. Ekkor ha meghívom rá az eszik metódust akkor, a kutya osztályba felüldefiniált metódus hívódik meg ha az virtual. Ha nem akkor az emlős osztályé. A kutyából származtatott metódusok továbbra is virtuálisak maradnak ha az ősosztályba azok voltak.


pl:


#include<iostream>

using namespace std;


class Emlos{

public:

virtual void eszik(){

cout << "Emlos eszik." << endl;

}

};


class Kutya:public Emlos{

public:

void eszik(){

cout << "Kutya eszik." << endl;

}

};


class Puli:public Kutya{

public:

void eszik(){

cout << "Puli kutya eszik." << endl;

}

};


int main(){

Emlos* e1=new Emlos;

Emlos* e2=new Kutya;

Emlos* e3=new Puli;

Kutya* k1=new Kutya;

Kutya* k2=new Puli;

Puli* p=new Puli;

//Puli* p=new Kutya; //szintaktikai hiba lenne

e1->eszik();

e2->eszik();

e3->eszik();

k1->eszik();

k2->eszik();

p->eszik();

delete e1;

delete e2;

delete e3;

delete k1;

delete k2;

delete p;

return 0;

}


Ki lehet próbálni virtual nélkül is.

------------------

Egyébként az kimaradt hogy többalakúság van osztályok szintjén kívül is, 2 függvénynek lehet pontosan ugyan az a neve, egyértelműen azonosít egy függvényt a paraméterlistája és a neve, nyilván 2 eltérő paraméterlistájú függvény lehet azonos nevű (egyazon névtérbe). Ugyanez osztályok metódusára is igaz.

2012. nov. 18. 22:35
Hasznos számodra ez a válasz?
 8/9 A kérdező kommentje:
Köszönöm, értek most már mindent!
2012. nov. 19. 14:57
 9/9 anonim ***** válasza:

Szívesen,azt hozzá kell tenni hogy az ősosztályban lehet olyan metódus amit tegnap 18:50-kor írtál ez az un. pure virtual

A tegnapi példánál maradva virtual void eszik() = 0; az emlős oszályban.

Ekkor szintaktikai hiba az Emlos* e1=new Emlos.


A teljesség kedvéért megemlítem hogy van többszörös öröklődés c++ -ban, több osztályból származhat egy osztály, de ez kezdőknek nem ajánlott, sőt olyan szinten el tudja bonyolítani az öröklődési hierarchiát, hogy nem vált be inkább kifele vezetik a nyelvből, a fordító is figyelmeztet (bár lefordítja) hogy ne használd.

Pl van a Földi és van a Vízi járművek osztály. E kettőből származtatunk egy kétéltű járművek osztályt, de mind2 ősben van kormányoz metódus ekkor el akar fordulni egyik jobbra a másikkal lehet balra fordulna, ekkor ki tudja mit csinál, meg rengeteg probléma felmerül ami egyszeres öröklődésnél nem.

2012. nov. 19. 16:19
Hasznos számodra ez a válasz?

További kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!