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

Nasledjivanje kako i cemu?(pogledajte kod)

[es] :: C/C++ programiranje :: Nasledjivanje kako i cemu?(pogledajte kod)

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mojsilo2003
Ivan Mojsilovic
Novi Sad

Član broj: 17984
Poruke: 12
195.252.85.*

Sajt: www.graficar.dzaba.com


Profil

icon Nasledjivanje kako i cemu?(pogledajte kod) 10.01.2004. u 01:16 - pre 245 meseci
Pozdrav,
dobio sam zadatak da realizujem nasledjivanje.
Osnovna klasa je klasa Figura, a izvedene su Krug,Kvadrat,Trougao.
Za sada mi trebaju samo dve funkcije, jedna za racunanje Obima,
a druga za Povrsinu.Malo sam pokupio sa predavanja malo iz nekih knjiga
i uradio sam sledece:
Code:

#ifndef FIGURA_2
  #define FIGURA_2

class Fig
  {
    public:
      Fig(){};
      virtual ~Fig(){};
      virtual double Obim() const=0;
      virtual double Povrsina() const=0;
  };
#endif

#ifndef FIG_KRUG_2
  #define FIG_KRUG_2
  #include <math.h>

class Krug : public Fig
  {
    private:
      double r;
    public:
      Krug(double rr=1) : Fig() {r=rr;};
      double Obim() const {return 2*r*M_PI;}
      double Povrsina() const {return r*r*M_PI;}
      double Getr() const {return r;}

  };
#endif;

#ifndef KVADRAT_2
  #define KVADRAT_2

class Kvadrat : public Fig
  {
    private:
      double a;
    public:
      Kvadrat (double aa=1) : Fig() {a=aa;};
      double Obim() const {return 4*a;}
      double Povrsina() const {return a*a;}
  };
#endif
#ifndef TROUGAO_2
  #define TROUGAO_2

class Trougao : public Fig
  {
    private:
      double a,b,c;
    public:
      Trougao(double str) : Fig() {a=b=c=str;}//jednakostranicni
      Trougao(double str, double osn) : Fig() {a=b=str;c=osn;}//jednakokraki
      Trougao(double stra,double strb,double strc) : Fig()//pravougli
    {a=stra;b=strb;c=strc;}              //nemora biti ali recimo da jeste
      double Obim() const {return a+b+c;}
      double Povrsina() const
    {
      if (a==b==c) return ((a*a*sqrt(3))/4);
      if ((a==b)&&(a!=c)&&(b!=c)) return ((b*sqrt(a*a-(b*b)/4))/2);
        else return (a*b/2);

    }
  };
#endif

#include <iostream.h>
#include <conio.h>

void main()
  {
    clrscr();
    Fig *pk=new Krug;
    Fig *pt1=new Trougao(1);
    Fig *pt2=new Trougao(1,2);
    Fig *pt3=new Trougao(1,2,3);
    Fig *pkv=new Kvadrat;
    cout<<"obim kruga: "<<pk->Obim();
    cout<<"\n";
    cout<<"povrsina kruga: "<<pk->Povrsina();
    cout<<"\n";
    cout<<"obim kvadrata: "<<pkv->Obim();
    cout<<"\n";
    cout<<"povrsina kvadrata: "<<pkv->Povrsina();
    cout<<"\n";
    cout<<"obim jednakostranicnog trougla: "<<pt1->Obim();
    cout<<"\n";
    cout<<"povrsina jednakostranicnog trougla: "<<pt1->Povrsina();
    cout<<"\n";
    cout<<"obim jednakokrakog trougla: "<<pt2->Obim();
    cout<<"\n";
    cout<<"povrsina jednakokrakog trougla: "<<pt2->Povrsina();
    cout<<"\n";
    cout<<"obim pravouglog nejednakokrakog trougla: "<<pt3->Obim();
    cout<<"\n";
    cout<<"povrsina pravouglog nejednakokrakog trougla: "<<pt3->Povrsina();


    delete pk,pkv,pt1,pt2,pt3//moze li to ovako ili za svaki treba posebno delete?;
    getch();
  }



Nemojte mi zameriti na mozda smesnom stilu pisanja koda, ali tako nas
uce i tako zahtevaju(molim vas recite mi da li su u pravu).
Kod se bez problema kompajlira i dobiju se tacni rezultati.

Mene zanima sledece:posto nisam bas najbolje shvatio nasledjivanje
ne znam da li sam na pravom putu resavanja problema.

Nisam ukapirao cemu uopste sluzi nasledjivanje.Profa tvrdi da je to
najosnovnija stvar u objektnom programiranju.Ja na ispitu to isto moram
njemu reci makar ne bilo tako!

Molio bih ako neko ima raspolozen da mi sve ovo malo pojasni
i da mi kaze da li sam ista dobro uradio u gore navedenom kodu.
Hvala!!

Ja programiram C++
C++ programira mene!!
 
Odgovor na temu

milos23
matf
bgd

Član broj: 16989
Poruke: 118
195.252.85.*

Sajt: www.autoshowserbia.info


Profil

icon Re: Nasledjivanje kako i cemu?(pogledajte kod) 10.01.2004. u 22:09 - pre 245 meseci
zar je tolko nisko pao pmf ili sta vec u ns..........
nasledjivanje je i najvazniji deo uz polimorfizam u objektnom programiranju, uz koncept klasa.........
u sustini ti je dobro, nego bi trebalo da koristis novine u c++ da kucas biblioteke bez h i da koristis namespace...........a ako ces da budes picajzla mozes i da izvedes ostale vrste trougla(pravougli,.....) iz klase trougao, to bi ti skolski bilo lepse
 
Odgovor na temu

MilošV
Podgorica

Član broj: 7996
Poruke: 484
195.66.163.*



+1 Profil

icon Re: Nasledjivanje kako i cemu?(pogledajte kod) 12.01.2004. u 07:43 - pre 245 meseci
Cao :)
Kad bi imao malo vise funkcija definisanih u klasi Fig, nasljedjivanje bi posluzilo tome da objekat svake izvedene klase (Krug, Kvadrat...) moze pozvati te iste funkcije, bez dodatnog definisanja... To i nije nesto, osim u slucaju kad ti treba klasa izvedena iz neke za koju nemas source.
Glavna fora kod OOP je polimorfizam (keyword: virtual) zahvaljujuci kojem mozes, ukoliko ti zatreba, da uradis npr. ovo:
Code:

double NekaFunkcija(Fig* f)
{
return f->Obim() * f->Povrsina();
}

Dakle, da definises jednu funkciju koja ce odradjivati posao za sve izvedene klase, kao i za one koje ces kasnije izvoditi... Bez ovoga, morao bi za svaku izvedenu klasu posebno da definises istu f-ju.
 
Odgovor na temu

mojsilo2003
Ivan Mojsilovic
Novi Sad

Član broj: 17984
Poruke: 12
195.252.85.*

Sajt: www.graficar.dzaba.com


Profil

icon Re: Nasledjivanje kako i cemu?(pogledajte kod) 13.01.2004. u 00:40 - pre 245 meseci
Pozdrav
Evo sta sam ja shvatio:
virtualna metoda koja nije definisana(dakle nema tela f-je)
u osnovnoj klasi naziva se apstraktna metoda(ili ti cistom virtuelnom).
Klase koje sadrze apstraktne metode su apstraktne klase. Ne mogu
da se stvaraju odjekti tipa apstraktne klase nego mogu da se definisu
pokazivaci i reference na njih.(dal sam dovde dobro skapirao ili ne??)

Negde sam procitao da je svrha apstraktnih klasa da se iz njih izvode
druge klase.

Ono sto me buni :
ako u osnovnoj apstraktnoj klasi nemamo telo metoda(definiciju)
mi za svaku izvedenu klasu moramo drugacije definisati nasledjene metode. Sta smo mi onda dobili nasledjivanjem?
U mom primeru za svaku izvedenu klasu sam morao drugacije izracunavati povrsinu i obim(Kvadrat, Trougao, Krug).

Mozda je moj primer suvise trivijalan da bih bolje video potrebu nasledjivanja. Mogao sam napisati 3 klase(Kvadrat, Trougao, Krug)
i koristiti njihov metode.
Da sam sve klase sacuvao u posebnim H fajlovima opet bih morao
svaki da #include-ujem.

Ako mozete da mi navedete neki primer gde se jasno vidi potreba za nasledjivanjem da bih mogao shvatiti.
Hvala unapred!

Ja programiram C++
C++ programira mene!!
 
Odgovor na temu

MilošV
Podgorica

Član broj: 7996
Poruke: 484
195.66.163.*



+1 Profil

icon Re: Nasledjivanje kako i cemu?(pogledajte kod) 13.01.2004. u 07:28 - pre 245 meseci
Vec sam ti naveo :)
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
62.108.111.*



Profil

icon Re: Nasledjivanje kako i cemu?(pogledajte kod) 13.01.2004. u 12:07 - pre 245 meseci
Citat:
mojsilo2003:
Mozda je moj primer suvise trivijalan da bih bolje video potrebu nasledjivanja. Mogao sam napisati 3 klase(Kvadrat, Trougao, Krug)
i koristiti njihov metode.
Da sam sve klase sacuvao u posebnim H fajlovima opet bih morao
svaki da #include-ujem.


Vidi sledeci kod...

Figura* niz[99];
int i;
for (i=0; i<33; i++)
{
niz[3*i + 0] = new Trougao(...);
niz[3*i + 1] = new Krug(...);
niz[3*i + 2] = new Kvadrat(...);
}

Sada se u nizu nalazi 99 figura, svaki treci je krug, trougao ili kvadrat.
Obim svih figura se racuna kao:

double obim = 0.0;
for (i=0; i<99; i++) obim += niz->Obim();
// kompajler ce ovde pozvati odgovarajucu metodu Obim iz odgovarajuce klase.


Probaj da dodas jes neke zajednicke osobine Figurama (boja, pozicija, metodu
NacrtajSe())... Napisi jos neke igure (n-tougao, elipsu, )...
uz malo zezanja eto ti jednostavnog programcica za crtanje...
 
Odgovor na temu

mojsilo2003
Ivan Mojsilovic
Novi Sad

Član broj: 17984
Poruke: 12
195.252.85.*

Sajt: www.graficar.dzaba.com


Profil

icon Re: Nasledjivanje kako i cemu?(pogledajte kod) 13.01.2004. u 18:48 - pre 245 meseci
Pozdrav
Ok skapirao sam. Treba mi vise zajednickih osbina(u mom slucaju za figure)
i tu se ispoljava potreba za nasledjivanjem da ne bih nanovo pisao jedne te iste metode.
thanks dude!
Ja programiram C++
C++ programira mene!!
 
Odgovor na temu

[es] :: C/C++ programiranje :: Nasledjivanje kako i cemu?(pogledajte kod)

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

Postavi temu Odgovori

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