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

apstraktna klasa koja nasledjue neku klasu

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

[ Pregleda: 3257 | Odgovora: 6 ] > FB > Twit

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 - pre 214 meseci
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?
 
Odgovor na temu

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 - pre 214 meseci
Apperently moze. Sta je problem?
Restless one,
 
Odgovor na temu

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 - pre 214 meseci
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?
 
Odgovor na temu

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


+3 Profil

icon Re: apstraktna klasa koja nasledjue neku klasu04.06.2004. u 22:58 - pre 214 meseci
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
 
Odgovor na temu

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 - pre 214 meseci
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?
 
Odgovor na temu

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


+3 Profil

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

f
 
Odgovor na temu

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 - pre 214 meseci
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
 
Odgovor na temu

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

[ Pregleda: 3257 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

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