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 1050 korisnika na forumu :: 46 registrovanih, 6 sakrivenih i 998 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: 357magnum, A.R.Chafee.Jr., atmel, bojank, bojcistv, ccoogg123, Denaya, djboj, DragoslavS, flash12, FOX, hyla, ikan, Karla, Komentator, Krvava Devetka, Kubovac, Lošmi, marsovac 2, Mi lao shu, mikrimaus, mile09, milenko crazy north, milutin134, mrav pesadinac, nemkea71, ozzy, panzerwaffe, raptorsi, rasok, ruger357, S2M, savaskytec, slonic_tonic, Smiljke, spqr5, Srle993, Sumadija34, Tas011, Trpe Grozni, Vlada1389, wolverined4, YugoSlav, Zoca, žeks62, 79693