|
Poslao: 10 Jan 2006 23:41
|
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.
|
|
|
Poslao: 11 Jan 2006 08:37
|
offline
- bNasty

- Građanin
- 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.
|
|
|
|
|
|
|
Poslao: 11 Jan 2006 22:45
|
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
|
|
|
|
|
|
|
Poslao: 12 Jan 2006 01:55
|
offline
- 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;
|
|
|
|
|
|
|
Poslao: 12 Jan 2006 02:18
|
offline
- meka

- 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.
|
|
|
|
|
|
|
Poslao: 12 Jan 2006 02:34
|
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?!
|
|
|
|
|
|
|
Poslao: 12 Jan 2006 09:38
|
offline
- bNasty

- Građanin
- 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
|
|
|
|
|
|