Polimorfizam

Polimorfizam

offline
  • Pridružio: 19 Maj 2005
  • Poruke: 352
  • Gde živiš: Sabac - Novi Sad

Zanimaju me neke sitnice vezane za polimorfizam.
Konkretno
   virtual double obim() const=0;    virtual double povrsina() const=0;    virtual ~Figura(){}

Moze li sto jednostavnije objasnjenje ove tri funkcije...?
Da, najvise me zanima deklaracija destruktora...
Obzirom da radi i kao
   ~Figura(){}
sta je validnije?[/code]



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 17 Mar 2004
  • Poruke: 293
  • Gde živiš: UK

virtual double obim() const=0;
const, na ovom mestu, znachi da je funkcija konstantna i garantuje da nece menjati objekat kom pripada. Ovo ti ujedno znachi da iz te funkcije ne mozhesh da zovesh ni jednu drugu funkciju koja nema isti const-'potpis' jer su kompajleri jako strogi po pitanju const-korektnosti.

"=0" oznachava 'chistu virtuelnu' metodu, i time chini i celu klasu 'abstraktnom' (pure abstract). Klasu koja sadrzhi funkciju sa ovakvim potpisom ne mozhesh da instancirash, vec morash da izvedesh klasu koja ce implementirati apstraktnu metodu. Chiste virtuelne klase su u C++u ono shto su "interfejsi" u Javi.

virtual ~Figura(){} ~Figura(){}

Ovo zahteva malo duzhu prichu, ali u osnovi - virtuelni destruktor je OBAVEZAN u sluchaju klasa koje ce sigurno biti nasledjene. Virtuelni destruktor obezbedjuje mehanizam potreban kompajleru da zna kojim redom da poziva destruktore pri unishtavanju objekta i sprechava chestu greshku poznatu kao "object slicing". Virtuelnim destruktoromu klasi forsirash kompajler da napravi virtuelnu tabelu i da korektno postupa sa objektom kada je prosledjen kao pointer na baznu klasu (tj. da "zna" kog je tipa objekat, iako drzhi samo pointer na baznu klasu, a ne na izvedenu).

K'o shto rekoh, ovo je poduzha oblast, nadji dobar tekst na netu na tu temu (chudno, ali vecina knjiga NEMA ovo objashnjeno kako valja), jer je apsolutno neophodno razumeti u tanchine kako i zashto kompajler generishe "vftb" (virtuelne tabele funkcija), i kako bezbedno raditi sa hijerarhijom klasa preko baznih pointera.



offline
  • Pridružio: 19 Maj 2005
  • Poruke: 352
  • Gde živiš: Sabac - Novi Sad

@bNasty

Hvala za odgovor, ovako nesto mi je trebalo, malo cu jos da razmislim o ovome, pa ako zapne eto mene opet

offline
  • opi 
  • Novi MyCity građanin
  • Pridružio: 12 Jan 2006
  • Poruke: 2

jos nesto, skoro je pravilo da koristis pokazivace na objekte klasa izvedenih iz osnovne( koja sadrzi potpuno virtuelnu, t.j. apstraktnu metodu) , i svi oni mogu da se izjednace sa pokazivacima na objekte osnovne klase:

tipicno:

class A
{
public:
A(){}
virtual void f()=0;
};

class B: public A
{
public:
B(){}
f(){cout<<"zdravo\n";}
};


A *osnovni;
B *izvedeni=new B();

//moze:

A=B;

offline
  • meka  Male
  • Počasni građanin
  • Pridružio: 06 Avg 2003
  • Poruke: 811
  • Gde živiš: Novi Sad / Vojvodina

bNasty, obzirom da je toliko tesko naci ovo objasnjeno, da li bi ti bilo tesko da napravis neku sticky temu sa objasnjenjem? Ja, na primer, ucim vec skoro 6 godina C++ i pojma nisam imao o ovome. Necu da kazem da sam nesto extra iskusan, ali nikada nisam naleteo na tako neko objasnjenje. Hvala ti u svakom slucaju.

offline
  • Pridružio: 19 Maj 2005
  • Poruke: 352
  • Gde živiš: Sabac - Novi Sad

@opi
Pristup objektu izvedene klase koja nasledjuje abstraktnu klasu moze i pomocu reference. Ako se ne varam?!

offline
  • Pridružio: 17 Mar 2004
  • Poruke: 293
  • Gde živiš: UK

meka ::bNasty, obzirom da je toliko tesko naci ovo objasnjeno, da li bi ti bilo tesko da napravis neku sticky temu sa objasnjenjem? Ja, na primer, ucim vec skoro 6 godina C++ i pojma nisam imao o ovome. Necu da kazem da sam nesto extra iskusan, ali nikada nisam naleteo na tako neko objasnjenje. Hvala ti u svakom slucaju.

Kratak sam sa slobodnim vremenom, ali probacu da ugrabim malo vremena preko vikenda. Ako vidish temu koja obradjuje ova dva topika (const-varijacije i zezalice oko polimorfizma) znachi da sam nashao to malo vremena Smile

Ko je trenutno na forumu
 

Ukupno su 1049 korisnika na forumu :: 49 registrovanih, 5 sakrivenih i 995 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Bokiboks, Boris90, ccoogg123, cifra, DPera, DragoslavS, dushan, Džordžino, esx66, hooraay, janbo, JOntra, Još malo pa deda, Kaplar2, Kibice, kolle.the.kid, Kubovac, laganini123, laki_bb, laurusri, ljuba, Luka Blažević, maiden6657, marsovac 2, mercedesamg, Mercury, Mi lao shu, milanovic, Millennium, Milometer, Miloš Popadić, Misirac, mrvica78, nikoladim, Nobunaga, operniki, ozzy, royst33, Srle993, stegonosa, Tas011, VJ, Vlada1389, Vlada78, Zerajic, zlaya011, šumar bk2, žeks62