Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

apstraktna klasa koja nasledjue neku klasu

[es] :: C programiranje :: apstraktna klasa koja nasledjue neku klasu

[ Pregleda: 1369 | Odgovora: 6 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

alpha
Nemanja Janic
Beograd

Član broj: 5223
Poruke: 35
*.118.eunet.yu



Profil

icon apstraktna klasa koja nasledjue neku klasu04.06.2004. u 01:35

Ok, ono sto zelim da pitam je sledece:
da li apstraktna klasa moze da bude izvedena?
Recimo nesto ovako:
Code:

class Moja{
int a;
public:
...
};

class MojaIzvedena : public Moja{
int b;
public:
...
virtual void NekaFunkcija()=0;
...
};


...znam koliko ne znam... ili ne?
04.06.2004. u 01:35 

Revisor
Sofija - NBGD

Član broj: 18843
Poruke: 59
*.matf.bg.ac.yu

Sajt: alas.matf.bg.ac.yu/~mr021..


Profil

icon Re: apstraktna klasa koja nasledjue neku klasu04.06.2004. u 15:42
Apperently moze. Sta je problem?
Restless one,
04.06.2004. u 15:42 

alpha
Nemanja Janic
Beograd

Član broj: 5223
Poruke: 35
*.249.eunet.yu



Profil

icon Re: apstraktna klasa koja nasledjue neku klasu04.06.2004. u 20:54
U medjuvremenu sam malo prokopao po literaturi i video da to nigde nije eksplicitno receno, pa sam zato pitao.
Problem je, u stvari, na sasvim drugoj strani. Imam zadatak da uradim odredjeni sistem klasa. I poenta je da nisam bio najsigurniji u tome sta koja klasa treba da nasledi, i koja klasa treba da bude bazna. Medjutim to sam u medjuvremenu kako tako resio (radi se o klasi figura koju nasledjuju klase kvadrat, krug, mnogougao i trougao - ali ispod svega toga postoje i klase boja i tacka i sve se to zakomplikovalo...) ali sad imam sledeci problem:
napravio sam listu ciji su elementi pokazivaci na pokazivace apstraktne klase. Ali, kada dodam element u listu, kompajler kaze ne moze, sinak...
otprilike to izgleda ovako:
Code:

class Figura{
...
};

class Trougao:public Figura{
...
};

class Lista{
struct Element{
Figura ** sadrzaj;
Element * sledeci;
};
Element * prvi;
Element * poslednji;
public:
void UbaciFiguru(Figura ** ff){
...
}
};

int main(){
Lista ll;
Trougao ** tt;
ll.UbaciFiguru(tt); // ovde mi kaze da tip argumenta ne odgovara
...
return 1;
}


izbacio sam sve detalje iz gornjeg listinga, ali imam i konstruktore i destruktore i celu pricu uradjenu, ali negde ocigledno gresim... verovatno nisam skapirao pravilno kako funkcionise nasledjivanje i sta u stvari predstavjla objekat koji je nasledio apstraktnu klasu...

...znam koliko ne znam... ili ne?
04.06.2004. u 20:54 

filmil
Filip Miletić
Oce Technologies B.V., inženjer hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.adsl.zonnet.nl

Jabber: filmil@jabber.org
ICQ: 36601391


Profil

icon Re: apstraktna klasa koja nasledjue neku klasu04.06.2004. u 22:58
Greška je u sledećem. Iako važi Trougao is-a Figura, pa čak i Trougao* is-a Figura*, to ne važi za pointer na pointer: Trougao** not is-a Figura**.

Rešenje tvog problema jeste da tt deklarišeš kao Figura **tt, a ne Trougao **tt.

Ja bih radije koristio STL: Vector<Figura*> ili nešto slično.

f
04.06.2004. u 22:58 

alpha
Nemanja Janic
Beograd

Član broj: 5223
Poruke: 35
*.93.eunet.yu



Profil

icon Re: apstraktna klasa koja nasledjue neku klasu05.06.2004. u 00:31
Ali kako da onda ubacim neku konkretnu figuru, recimo trougao, u tu listu? Jer to i jeste poenta te liste... pregledao sam ranije poruke na forumu, i video da je vec neko postavio slican problem, samo sto je taj problem sa dinamickim nizom. Nemam striktan zahtev da moj problem resim preko liste, ali mislim da je to elegantnije resenje.
Isto tako, i ja smatram da bi mozda template-i i STL bili bolje resenje za ovo, ali ne bih da ulazim sad i u to, jer nisam radio sa njima do sada, i malo sam kratak sa vremenom.
...znam koliko ne znam... ili ne?
05.06.2004. u 00:31 

filmil
Filip Miletić
Oce Technologies B.V., inženjer hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.adsl.zonnet.nl

Jabber: filmil@jabber.org
ICQ: 36601391


Profil

icon Re: apstraktna klasa koja nasledjue neku klasu05.06.2004. u 00:44
Sve što treba je da promeniš deklaraciju Trougao **tt u Figura **tt. Ostatak programa ne treba da se menja.

f
05.06.2004. u 00:44 

Pah-Wrait
Miroslav Kazanski
Beograd

Član broj: 4811
Poruke: 17
*.dial.InfoSky.Net



Profil

icon Re: apstraktna klasa koja nasledjue neku klasu06.06.2004. u 00:17
Code:

class Figura{
...
};

class Trougao:public Figura{
...
};

class Lista{
struct Element{
Figura ** sadrzaj;
Element * sledeci;
};
Element * prvi;
Element * poslednji;
public:
void UbaciFiguru(Figura ** ff){
...
}
};

int main(){
Lista ll;
Trougao ** tt;
ll.UbaciFiguru(tt); // ovde mi kaze da tip argumenta ne odgovara
...
return 1;
}


E sad, fora!!!
Naravno da se argumenti razlikuju, ali promasio si poentu zasto se prave izvedene, virtuelne i apstraktne klase!!!
U mani treba da stoji sledece:

int main(){
Lista ll;
Figura ** tt;
*t=new Trougao;
ll.UbaciFiguru(tt);
...
return 0;
}

Dobio si da pokazivac na osnovnu klasu bude podatak neke izvedene klase, tako da mozes da u kombinujes mnogo razlicitih podataka (iz jedne klase moze biti neograniceno izvedenih). Koristis istu funkciju svuda, samo menjas pokazivac koji je tipa osnovne klase (kao i u dekleraciji f-je), a pokazuje na podatke izvedene klase.
Pozdravs
06.06.2004. u 00:17 

[es] :: C programiranje :: apstraktna klasa koja nasledjue neku klasu

[ Pregleda: 1369 | Odgovora: 6 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.