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:
#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!!
C++ programira mene!!