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

Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)

[es] :: C/C++ programiranje :: C/C++ za početnike :: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)

[ Pregleda: 7938 | Odgovora: 18 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Wajda.W
Vladimir Vajda
Zrenjanin

Član broj: 127039
Poruke: 323
*.dial.cpe.InfoSky.Net.



+101 Profil

icon Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)28.01.2007. u 16:27 - pre 209 meseci
Nestop smo radili u skoli virtual f-je i konstruktore izvedenih klasa,profesorica jednostavno ne zna objasniti.
Ako nekog ne mrzi da uz jedno 2 primera detaljno objasni virtualne f-je i konstruktore izvedenih klasa.
Please
 
Odgovor na temu

SuPeR_MaSteR
Marko Stamenković

Član broj: 88590
Poruke: 115
*.inffo.net.



Profil

icon Re: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)28.01.2007. u 17:58 - pre 209 meseci
A sta mislis da pitas google?
 
Odgovor na temu

Wajda.W
Vladimir Vajda
Zrenjanin

Član broj: 127039
Poruke: 323
*.dial.cpe.InfoSky.Net.



+101 Profil

icon Re: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)28.01.2007. u 19:06 - pre 209 meseci
OK nasao sam nesto za contructor-e al' nisam za virtual f-je i njihovu primenu
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)28.01.2007. u 20:38 - pre 209 meseci
Citat:

[...] al' nisam za virtual f-je i njihovu primenu


Kada ti neko na primer kaže da sedneš, to se obično kaže komandom glasom:
Code:

Sedi // <--- ili prevedeno na jezik računara, metodom: Sedi()

Zanimljivo je da uvek ZNAŠ ge ćeš da sedneš kad primiš tu komandu:

1) ako si u učionici - sedneš na školski stolicu (nećeš sesti niti na pod niti na sto)
2) ako si na izletu, sedneš na travu (nećeš sesti nikome na glavu ;) )
3) ako si na stepeništu u nekoj zgradi - sešćeš na neku stepenicu (nećeš tražiti stolicu)
4) ako si u bioskopu, nećeš sesti na stepenice nego na sedište

itd...

Ma koliko ovo delovalo logično, trivijalno i beznačajno, ipak GENIJALNO je to što primiš
samo jednu ISTU kratku komadu (Sedi), a odreaguješ u svakom kontekstu DRUGAČIJE,
tj. sedneš na drugi objekat !

Sad, za trenutak zamisli da ovakav 'koncept' ne postoji kod ljudi u sporazumevanju,
nego je potrebno ići na neki drugačiji sistem komunikacije.

Iste komade, shodno prethodnim primerima da bi bile JEDNOZNAČNE, morao bi da kažeš
recimo ovako /karikirano/:

1) sedi_na_stolicu_koja_se_nalazi_gradu_x_skoli_y_spratu_z_ucionici_q_pozicija_X_pozicija_Y()
itd...

Sad zamisli kad bi za svaku sitnicu koja postoji na svetu morao da pamtiš i/ili izgovaraš ovako
dugačke komande. Odmah ti je jasno da bi to bilo glupo, maltene neizvodljivo.


---

E sad, recimo ovo gore ti je jasno, i dobiješ zadatak da napraviš program za crtanje geometrijskih
oblika. Mogao bi odmah da počneš da praviš prototipove funkcija za crtanje oblika:

Code:

CrtajTrougao()
CrtajKvadrat()
CrtajKrug()
...
CrtajKoZnaSta()

Dakle, morao bi da za svaki izmišljeni geometrijski oblik na zemlji napraviš POSEBNU funkciju za njega. Što
je najgore, za svaki novoizmišljeni oblik, morali bi BAŠ TEBE da zovu da ga dodaju u spisak funkcija. Takođe,
ni jedan tvoj IZUM koji si smislio za recimo brzo iscrtavanje oblika ne bi bio dostupan budućim projektantima.

Ovo očigledno liči na ono rešenje sa dugačkim nazivom funkcija i sa beskonačno mnogo takvih funkcija.

OOP nudi rešenje za to u vidu virtuelnih funkcija i izvođenja (što je drugi koncept, ali se koriste sinhronizovano).

Npr, bolje je da smisliš šta je to ZAJEDNIČKO za sve geometrijske oblike, tj. koje su operacije zajedničke. Na primer,
sve oblike možeš da nacrtaš, odštampaš i izračunaš površinu. Da ne idemo dalje u analizu...

Code:

klasa GeometrijskiOblik
{
   Crtaj();
   Povrsina();
   Stampaj();
   // ...
}


... a posle samo ređaš poznate geometrijske oblike redom, i onu logiku koja je različita - sam treba da
implemetiraš:

Code:

klasa Krug : izvedena iz GeometrijskiOblik
{
   // <--- OVDE DODAŠ ŠTA JE SPECIFIČNO ZA KRUG
}
Krug::Crtaj()
{
   // ...
}


Code:

klasa Kvadrat : izvedena iz GeometrijskiOblik
{
   // <--- OVDE DODAŠ ŠTA JE SPECIFIČNO ZA KVADRAT
}
Kvadrat::Crtaj()
{
   // ...
}


Primeti da se funkcija uvek zove ISTO a izvršavaće se RAZLIČIT KOD, u zavisnosti koji je tip objekta.

Kasnije, u upotrebi:
Code:

ObjekatTipaKrug->Crtaj()
ObjekatTipaKvadrat->Crtaj()
ObjekatTipaTrougao->Crtaj()

Uvek će se nacrtati oblik u kontekstu objekta koji se koristi, dakle:

Code:

ŠkolskaKlupa->Sedi()
Stepenište->Sedi()
Trava->Sedi()


Ovakav koncept nudi:

1. laku raspodelu koda i posla (timski rad)
2. lakše održavanje
3. itd...

A sad, knjigu u ruke, sve piše, ovo je samo uvod.



[Ovu poruku je menjao X Files dana 30.01.2007. u 20:36 GMT+1]
 
Odgovor na temu

del-boy
Bojan Delić
Beograd

Član broj: 9330
Poruke: 1089

Sajt: www.delic.in.rs


+21 Profil

icon Re: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)28.01.2007. u 22:17 - pre 209 meseci
X Files, odlično objašnjenje. Iako sam znao ovo što si napisao, jako si slikovito objasnio problematiku. Svaka čast.
 
Odgovor na temu

Wajda.W
Vladimir Vajda
Zrenjanin

Član broj: 127039
Poruke: 323
*.dial.cpe.InfoSky.Net.



+101 Profil

icon Re: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)30.01.2007. u 09:20 - pre 209 meseci
HVALA PUNO!!!
Sada mi je jasnija svrha ovoga(MNOGO JASNIJA).
Za ostalo cu se potruditi.
Valjda ce biti neke Wajde od mene :-)
 
Odgovor na temu

3MAJ86
Marko Radić
Business Development Manager, Beauty
Industry
München

Član broj: 46087
Poruke: 253
*.adsl.sezampro.yu.

Sajt: marko-radic.blogspot.com


+137 Profil

icon Re: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)30.01.2007. u 17:42 - pre 209 meseci
X Files svaka čast. Ovaj tvoj post bi trebalo iskopirati u tutorial-e majke mi.

Samo jedan kratki offtopic:
@Wajda. W: Nemoj davati ovakva imena tema, jer ne govori ništa o tvom problemu, i verujem da će dobar deo korisnika jednostavno zaobići. Bolje bi bilo da si napisao npr. ''virtualne metode klasa'' ili nešto slično.


when there is a why there is no how
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.hsd1.ca.comcast.net.



+1001 Profil

icon Re: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)31.01.2007. u 16:49 - pre 209 meseci
Moram da se pridruzim cestitkama X-Files-u, jer je ulozio zaraznu kolicinu entuzijazma i zelje da
pomogne.

Moram, medjutim, da malo dosolim celu supu.

To sto je X-Files objasnio je zapravo odlicna ilustracija object-orientisanog programiranja, i sve sto
je rekao je vrlo tacno. Medjutim, to sve jos uvek nije dovoljno precizno objasnjenje upotrebe 'virtual'
metoda.

Malo detaljnije:

Recimo da imamo slucaj oca i sina (recimo otac Haso i sin Mujo). Sin Mujo po prirodi biologije moze da
nasledi gotovo sve metode od oca Hase (da hoda isto kao on, da ima slicnu frizuru, da slicno prica, da
isto puca loptu u basketu, itd, itd...). Ono malo razlike koje je pokupio od raznih drugih gena (recimo od
majke Fate) moze da se iskaze tako sto ce imati posebno implementirane metode koji mogu da ne
iskljucuju uticaj oca Hase
. To zovemo method overriding koji predstavlja svakodnevicu procesa
nasledjivanja.

Code:

class Haso
{
public:
    void Hodaj();
    void Pricaj();
    void IgrajBasket();
    void Misli();
};

class Mujo: public Haso
{
public:
    void Misli( )
    {
         if(hocuLiIgratVideoIgara)
         {
                   //
                   // U nekim situacijama razmislja drugacije, svojom glavom:
                   //
         }
         //
         // U svim ostalima, misli isto kao otac mu Haso:
         //
         Haso::Misli();
     }
     // Sve druge metode je potpuno nasledio od Hase (tj. pljunuti je babo)
}; 


Ima medjutim metoda koje nikako ne bi valjalo da nasledi od oca Hase. U prvom redu metod NadjiSebiZenu( ).
Ako bi ga direktno nasledio, pa isto kao otac mu Haso jurio onu istu Fatu (koja mu je mater, je li...) od njega bi
postao nenormalna individua (edipovac). Da bi se to sprecilo, sprovodi se jedna ostra krajnjost (tzv. pure
virtual
oznaka metoda. Kad se metod u parent klasi oznaci kao takav, to znaci da je klasa koja nasledjuje
u obavezi da ima svoju specificnu implementaciju tog metoda. Ako propustis da je implementiras u okviru
sinovljeve klase 'Mujo', kompajler vristi naglas i javlja da ne moze da implementira klasu 'Mujo'.

Code:

class Haso
{
public:
    void Hodaj();
    void Pricaj();
    void IgrajBasket();
    void Misli();

    // Obrati paznju na ovo:
    virtual void NadjiSiHanumu( ) = 0;
};

class Mujo: public Haso
{
public:
    void Misli( )
    {
         if(mNekeSituacije)
         {
                   //
                   // U nekim situacijama razmislja drugacije:
                   //
         }
         //
         // U svim ostalima, misli isto kao otac mu Haso:
         //
         Haso::Misli();
     }
     // Sve druge metode je potpuno nasledio od Hase (tj. pljunuti je babo)
     // samo ovaj ne moze da nasledi :
     virtual void NadjiSiHanumu( ); // za ovo mora da implementira sebi specificno resenje
}; 


Izmedju obicnog nasledjivanja koje je dozvoljava potpuno prihvatanje metoda roditelja (bez ikakvog dodavanja),
i pure virtual (koji strogo insistira da se poseduje sopstvena, licna, implementacija metoda), postoji i nijansa
sivog izmedju (obicni virtual) koji samo indicira da bi bilo pozeljno da i dete-klasa ima svoju implementaciju.
Obicni virtual je pozeljan kad se racuna sa time da ce desavati da se objekt cast-uje na svoj parent class. Da bi
se prilikom cast-ovanja izbegla dvosmislenost (tj. koji od dva metoda implementirati) primeni se virtual-izacija.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)31.01.2007. u 18:19 - pre 209 meseci
Odlično.
 
Odgovor na temu

NrmMyth
Ivan Maček
Split

Član broj: 63456
Poruke: 849
*.adsl.net.t-com.hr.

Sajt: www.dump.hr


Profil

icon Re: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)31.01.2007. u 22:34 - pre 209 meseci
Sad to zaokruzite prijedlogom jedne dobre knjige o OOP principima, sredite temu i stavite u TOP.
 
Odgovor na temu

blaza
n/a

Član broj: 961
Poruke: 743
*.smin.sezampro.yu.



+3 Profil

icon Re: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)01.02.2007. u 00:46 - pre 209 meseci
@milanche
nisi odabrao bas najsrecniji primer. Naime, posto u klasi Mujo koristis pure virtual member funkciju, ta klasa je apstraktna, i nije je moguce instancirati. Znaci, ne mozemo praviti objekte tipa Mujo. Ovu member funkciju je moguce definisati, i pozivati je iz izvedenih klasa, primenom scope resolution operatora, ali je klasa Mujo i dalje apstraktna. Pitam se, postoji li uopste prakticna primena definisanja pure virtual funkcije unutar apstraktne klase?
Cilj upotrebe OOPa je dobijanje sto upotrebljivijeg OOP modela postojeceg problema, postizanjem sto viseg nivoa apstrakcije. Koriscenje OOPa zbog sebe samog nije dobra programerska praksa.
Mogao si npr. definisati apstraktnu klasu Covek, koja sadrzi deklaracije potrebnih pure virtual member funkcija, Hodaj(), Pricaj(), NadjiSiHanumu(), itd. Klasu Mujo je sada moguce izvesti direktnim ili indirektnim nasledjivanjem iz klase Covek.
O_o
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.tekostolac.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)01.02.2007. u 09:12 - pre 209 meseci
Evo prilike da oni koji koriste BCB vide ono o čemu je govorio milanche.

Recimo, hoću da moja aplikacija uhvati poruku kada neko, na primer zatvara
Windowse, ili ide na promenu User-a. Na primer iz razloga da snimim nešto
u Registry bazu.

Potrebno je izvršiti overriding WndProc() metode koja je implementirana
u TForm i nasleđena iz nje.

--- H ---
Code:

class TForm1 : public TForm
{
   // ... method overriding ...
   void __fastcall WndProc( TMessage &Message )
   // ...

--- CPP ---
Code:

// ...
void __fastcall TForm1::WndProc( TMessage &Message ) 

   switch ( Message.Msg ) // <--- Dodaj novu logoku
   { 
      // ... hvatanje drugih poruka ... 

      case   WM_QUERYENDSESSION: 
      case   WM_ENDSESSION: 
             
             NekiZavrsniKod();
             break; 

      // ... hvatanje drugih poruka ... 
   } 
   
   TForm::WndProc( Message ); // <--- Ipak zadrži i postojeću logoku
}
// ...
NekiZavrsniKod() 

   if ( !Odradjeno ) 
   { 
      Odradjeno = true; 
      ZavrsniKod(); 
   } 
}
// ...


Ovo je jako korišćen koncept u BCB-u, jer puno poruka koje se događaju na nivou
Windowsa nisu pretočene u događaje BCB aplikacije i njenih objekata.

Tako se recimo vrlo lako može implementirati i OnMouseEnter/OnMouseLeave događaj
za one kontrole koje ovaj događaj nemaju 'ugrađen', na primer TPanel.


[Ovu poruku je menjao X Files dana 01.02.2007. u 10:45 GMT+1]
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.dynamic.sbb.co.yu.



+1001 Profil

icon Re: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)01.02.2007. u 18:18 - pre 209 meseci
Blazo,

tacno - trebalo je poci od klase NekiC'oek koja ima sve virtual a metod NadjiSiHanumu pure virtual.

Ima tu jos nijansi - pure virtual samo snazno sugerise sta treba uraditi. Niko nas jos uvek ne sprecava
da uradimo suprotno - unutar implementacije se moze potpuno osloniti na metod bazne klase.

Dok ne priviri DragiTata pa nam se svima na**be keve sto ne znamo C++, svi ce primeri biti samo donekle
adekvatni.
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.dynamic.sbb.co.yu.



+1001 Profil

icon Re: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)01.02.2007. u 18:26 - pre 209 meseci
Citat:
Pitam se, postoji li uopste prakticna primena definisanja pure virtual funkcije unutar apstraktne klase?


Odgovor na ovo znam cak i ja:

Ima smisla kod definisanja interfejsa - klasa koja sadrzi samo metode, zapravo skup "saltera" i "utikaca" koji
funkcionisu po dogovorenom protokolu, ali krajnje odgovore daju zavisno od okolnosti.

DirectShow filtri svi odreda implementiraju IUnknown interfejs, ciji metod QueryInterface( ) (ako ne i preostala dva metoda)
je uvek definisan kao pure virtual. Na ovaj nacin se dizajner (pisac) filtra primorava da nikako ne zaboravi da implementira
striktno svoju, specificnu implementaciju metoda kojim saopstava svetu koje sve interfejsove filter podrzava.
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.plus.com.



+4 Profil

icon Re: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)03.02.2007. u 11:05 - pre 209 meseci
^ "Da li ima smisla "definisanje" ili "deklarisanje" pure virtuelnih metoda (jer ja nisam video u gornjim primerima da je pure virtual metoda implementirana, tj. definisana, a nisam siguran kojom terminologijom se ko sluzhi)?

- Prvo ima smisla u nekim situacijama, ali nije preterano chesta praksa.
- Drugo nema smisla ni kao pitanje. Neka metoda mora biti pure-virtual, pa makar i destruktor.

 
Odgovor na temu

blaza
n/a

Član broj: 961
Poruke: 743
213.253.116.*



+3 Profil

icon Re: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)03.02.2007. u 14:08 - pre 209 meseci
Prvo, naravno.

O_o
 
Odgovor na temu

DjoleReject
Djordje Knezevic
Zvezdara

Član broj: 85258
Poruke: 309
*.dynamic.sbb.co.yu.



+1 Profil

icon Re: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)03.02.2007. u 18:29 - pre 209 meseci
OK momci, ovo je definitivno nacin na koji treba objasnjavati principe OO!
Kada bi profesori po skolama koristili lako prijemcive primere iz svakodnevnog zivota, brzo bi zamro podforum C++ za pocetnike. Mozda je dobra ideja da svi ubacimo po neku temu koja je cesto kamen spoticanja i objasnimo je sa mujom, sedanjem i slicnim primerima. Ukljucujem se cim u`vatim vremena.
De si Deda...
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.ADSL.neobee.net.



+1001 Profil

icon Re: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)03.02.2007. u 23:22 - pre 209 meseci
Ima jos jedna mnogo bolja stvar:

gotovo sve bitno vezano za object-oriented design moze i da se lepo nacrta i za to je dovoljan
i obican MS Paint, sto bi omogucavalo turbo-speed ucitavanje u svest znanja zeljnog citaoca.

To bi bila prava stvar, pitanje je samo ko ima vremena da se time bavi.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)04.02.2007. u 10:00 - pre 209 meseci
Citat:

[...] sto bi omogucavalo turbo-speed ucitavanje u svest znanja zeljnog citaoca.
To bi bila prava stvar, pitanje je samo ko ima vremena da se time bavi.


http://www.elitesecurity.org/t147587-2#1352752
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Verovatno nista tesko za vecinu od vas!! (konstruktori i virtualne metode klasa)

[ Pregleda: 7938 | Odgovora: 18 ] > FB > Twit

Postavi temu Odgovori

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