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

Bazna klasa

[es] :: C/C++ programiranje :: Bazna klasa

[ Pregleda: 5033 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.bankerinter.net

Sajt: www.mycity.rs


+1 Profil

icon Bazna klasa03.10.2002. u 14:45 - pre 261 meseci
Imam:
Code:

        void *p=new covek;
        ((covek *)p) -> cao ();


Ovo radi.
E sad pitanje, da li mogu da ovo isto radim (da zovem cao()) a da pri tome ne navodim tip pointera?
Dakle nesto kao :
p -> cao ();

Naravno, bitno mi je da ne navodim klasu, jer hocu da menjam objekte, tj. p bi morao da pokazuje i na klasu covek, i na klasu zivotinja...

Hocu da napravim niz od void pointera:
void *p[10];
i posle samo da kazem
p[n] -> show();
a da pritom ne vodim racuna koje je klase objekat na koga p pokazuje.

[Ovu poruku je menjao Predrag Damnjanovic dana 04.10.2002. u 12:59 GMT]
 
Odgovor na temu

alex
Aleksandar Radulovic
Senior Software Engineer, Spotify
Stockholm, Sweden

Član broj: 71
Poruke: 2194
*.landspitali.is

Jabber: alex@a13x.info
ICQ: -1
Sajt: www.a13x.info


+1 Profil

icon Re: Problem sa void pointerom03.10.2002. u 15:54 - pre 261 meseci
Hmm, ako ti neces da vodis racuna o tome koje je klase objekat na koga pointer pokazuje, kako mislis da ce kompajler znati na sta ti mislis?

Moras da navodis tip objekta, jer kompajler ne moze da zna na koji ti objekat mislis kada pozivas njegove metode.

A zasto p mora da ti bude void? Da li on-the-fly menjas tip objekta ili sta? ajd, malo pojasni...
Alex: My favorite site is http://localhost/
R.J. Oppenheimer: "I am become death, destroyer of worlds" (1945 AD)
tweet.13x ||
linkedin.13x
 
Odgovor na temu

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.bankerinter.net

Sajt: www.mycity.rs


+1 Profil

icon Re: Problem sa void pointerom03.10.2002. u 16:00 - pre 261 meseci
Pa ne mora da bude void.
Meni je samo bitno da pristupam objektima koji imaju f-ju koju ja trazim, dakle svi da imaju show().
Dejan Lozanovic spominje neko 'nasledjivanje' ?
 
Odgovor na temu

Preeky
Bg

Član broj: 1586
Poruke: 40
*.beotel.net



+21 Profil

icon Re: Problem sa void pointerom03.10.2002. u 16:09 - pre 261 meseci
Najbolje bi ti bilo da napravish apstraktnu klasu zivo_bice recimo
iz nje izvedesh druge klase i kasnije kreirash pointer na objekat tipa zivo bice i u njeha mozesh da alocirash objekat bilo koje druge izvedene klase sa new

znaci:

zivo_bice *t = new covek;
ili
zivo_bice *t = new zivotinja;

kad u toku rada koristish t->nesto()
uvek ce da bude pozvana ispravna funkcija trenutnog objekta


Znaci klasicni polimorfizam sa virtuelnim funkcijama.



int main[] = { 0xc3 };
 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.ptt.yu



Profil

icon Re: Problem sa void pointerom03.10.2002. u 16:17 - pre 261 meseci
Ako ne zelis na ovaj nacin mozes umesto void pointera, da koristis polimorfizam. Napravis baznu klasu iz koje izvodis ostale klase.
Npr. imas baznu (Bice) i dve izvedene klase (Covek i Zivotinja). Naravno osnovne funkcije clanice su viruelne, tako da ih overloadujes u izvedenim klasama (a i nemoras, postoji i drugi nacin, ako pomeris funkcionalnost u baznoj klasi).
Onda napravis objekte.
Code:

class Bice
{
    public:
      virtual void Show() = 0;
};

class Covek : public Bice
{
    public:
        void Show() { cout << "Covek!\n"; }
};

class Zivotinja : public Bice
{
    public:
       void Show() { cout << "Zivotinja\n"; }
};

void main()
{
       Bice* p[2];

       p[0] = new Covek;
       p[1] = new Zivotinja;

       p[0]->Show();
       p[1]->Show();
}
 
Odgovor na temu

Predrag Damnjanovic
Predrag Damnjanovic
Nis, Srbija

Član broj: 141
Poruke: 1305
*.bankerinter.net

Sajt: www.mycity.rs


+1 Profil

icon Re: Problem sa void pointerom03.10.2002. u 17:36 - pre 261 meseci
Hvala svima!
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.dial.InfoSky.Net

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: Bazna klasa04.10.2002. u 15:27 - pre 261 meseci
Hm, samo jedno pitanje.

Zar ,,apstraktne klase'' i ,,klase sa virtuelnim funkcijama'' ne predstavljaju istu stvar sa drugim imenima? Praktično različita terminologija, a ne suština.

(Radi razjašnjenja mojeg osrednjeg poimanja OOP terminologije)

Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.ptt.yu



Profil

icon Re: Bazna klasa04.10.2002. u 15:43 - pre 261 meseci
Po mom skromnom znanju, da.
 
Odgovor na temu

Ivan Tanasic
BGD-SRBIJA

Član broj: 220
Poruke: 965
*.yubc.net

Jabber: Autoexes@jabber.sk
ICQ: 129145438


Profil

icon Re: Bazna klasa04.10.2002. u 19:23 - pre 261 meseci
I po mom skromnom znanju da :) samo sto ovo abstraktne dolazi od javinog abstract, a ovo sa virtuelnim funkcijama iz c++a


Ivan Tanasic - Autoexes

>cd pub
>more beer
 
Odgovor na temu

Dejan Lozanovic
Dejan Lozanovic
Beograd

Član broj: 691
Poruke: 2325
*.beograd-3.tehnicom.net

Jabber: null@elitesecurity.org
Sajt: speedy-order.com


+75 Profil

icon Re: Bazna klasa04.10.2002. u 20:10 - pre 261 meseci
Citat:
tOwk:
Hm, samo jedno pitanje.

Zar ,,apstraktne klase'' i ,,klase sa virtuelnim funkcijama'' ne predstavljaju istu stvar sa drugim imenima? Praktično različita terminologija, a ne suština.

(Radi razjašnjenja mojeg osrednjeg poimanja OOP terminologije)

Ni govora, rec je od dva razlicita pojma, ne mozes kreirati objekat od abstraktne klase. Dok klasa moze da ima ima virtuelne funkcije a da ne bude abstraktna.
 
Odgovor na temu

Časlav Ilić
Braunšvajg, Nemačka

Član broj: 4945
Poruke: 565
*.beg.sezampro.yu



+27 Profil

icon Re: Bazna klasa05.10.2002. u 08:15 - pre 261 meseci
Apstraktna klasa je klasa sa virtuelnim funkcijama kod koje bar jedna virtuelna funkcija ima deklaraciju, ali nema definiciju (apstraktna funkcija). Deklaracija takve funkcije se završava se =0. Na primer:

Code:
[blue]
class shape
{
...
virtual void draw (int x, int y) =0;
...
};

Pošto apstraktna klasa ima nedefinisane funkcije, ne može se napraviti objekat njenog tipa. Svaka klasa koja je nasleđena od apstraktne, takođe je apstraktna ako se u njoj ne definišu sve apstraktne funkcije.
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.dial.InfoSky.Net

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: Bazna klasa05.10.2002. u 11:19 - pre 261 meseci
Časlave i Dejane zahvaljujem na razjašnjenju (a ovima što znaju jednako slabo kao i ja, zahvaljujem na pokušaju :)

Jedino je nezgodno što ste se usredsredili na opis apstraktnih klasa (koje su mi poznate, i stoga i jasne), umesto na pojam ,,virtuelne funkcije''.

Zastarelo pitanje, pronašao sam odgovor na Osnove OOP-a, ne baš jasan, ali poslužio je:
Zato, možete li malo pojasniti virtuelne funkcije: čemu služe, i koje su njihove prednosti?
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

Časlav Ilić
Braunšvajg, Nemačka

Član broj: 4945
Poruke: 565
*.drenik.net



+27 Profil

icon Re: Bazna klasa05.10.2002. u 12:20 - pre 261 meseci
Citat:
tOwk:

Zato, možete li malo pojasniti virtuelne funkcije: čemu služe, i koje su njihove prednosti?
Moraću da dam odgovor koji baš ne volim, ali stvarno je tako: pitanje je preširoko da bi se ovde odgovorilo na njega.

Mogu samo da te posavetujem da pročitaš neki duži tekst o tome, sa puno primera kako se koriste u dizajnu programa. Samo kratak opis o tome kako rade nije dovoljan.

Predlažem knjigu "Thinking in C++" od Brusa Ekela, besplatna je u elektronskom obliku i može se naći na www.bruceeckel.com. Ima je u html obliku i kod mene u lokalu: http://home.drenik.net/caslav/ticpp.zip (1706 kB)
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
..ndg-pm4-1.dialup.nethere.net



+6 Profil

icon Re: Bazna klasa05.10.2002. u 17:52 - pre 261 meseci
http://www.parashift.com/c++-faq-lite/virtual-functions.html
 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.ptt.yu



Profil

icon Re: Bazna klasa05.10.2002. u 18:08 - pre 261 meseci
Da, ja sam malo pomesao. Moja greska. Generalno ADT postaje, kada se u deklaraciji klase ukljucuju jedna ili dve cistih virtelnih funkcija (virtual void print(void) = 0;} Ciste virtuelne funkcije u ADT se nikada ne implementiraju jer nikada za taj tip klasa nece biti stvoren ni jedan objekat, s toga ADT sluzi samo kao definicija interfejsa za ostale objekte koji bi se iz nje, eventualno izvodili. Bez obzira na to ipak je moguce obezbediti implementaciju cisto virtuelne funkcije. U tom slucaju ta funkcija (clanica) bi mogla biti pozvana iz instanci koje su izvedene iz ADT.
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.dial.InfoSky.Net

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: Bazna klasa06.10.2002. u 12:02 - pre 261 meseci
Citat:
Časlav Ilić:
Moraću da dam odgovor koji baš ne volim, ali stvarno je tako: pitanje je preširoko da bi se ovde odgovorilo na njega.

Mogu samo da te posavetujem da pročitaš neki duži tekst o tome, sa puno primera kako se koriste u dizajnu programa. Samo kratak opis o tome kako rade nije dovoljan.

Pošto mi je trebalo razjašnjenje terminologije (ili dobra definicija izraza, ili kratak opis upotrebe), poslužilo je i već pomenuto. Kao što rekoh, pitanje je zastarelo, ali sam ga ostavio ako je neko u međuvremenu već odgovorio.

Citat:

Predlažem knjigu "Thinking in C++" od Brusa Ekela, besplatna je u elektronskom obliku i može se naći na www.bruceeckel.com. Ima je u html obliku i kod mene u lokalu: http://home.drenik.net/caslav/ticpp.zip (1706 kB)


Imam dotičnu knjigu već duže vremena, ali nikako i vremena da se pozabavim njom (a programiranjem se bavim u raznim programskim jezicima; ne može se svaki ,,profesionalni izraz'' naučiti :)

U svakom slučaju, zahvaljujem.

Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Bazna klasa

[ Pregleda: 5033 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

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