[ sendai @ 06.01.2007. 21:38 ] @
Ako netko ima volje da pogleda ovaj kod. Code: #include <iostream> using namespace std; class GrafObjekt; //------------------------------------------------------------ // KLASA Atom, nju nasljedjuje klasa "GrafObjekt" class Atom { private: Atom *pokSljedeci, *pokPrethodni; public: Atom *Sljedeci () { return pokSljedeci; } Atom *Prethodni () { return pokPrethodni; } void StaviSljedeci ( Atom *pok ) { pokSljedeci = pok; } void StaviPrethodni ( Atom *pok ) { pokPrethodni = pok; } virtual ~Atom(){} }; //------------------------------------------------------------- // KLASA Lista SADRZI FUNKCIJE ZA PUNJENJE I BRISANJE LISTE class Lista { private: Atom *glava, *rep; public: Lista():glava(NULL),rep(NULL){} virtual ~Lista(){} Atom *AmoGlavu() {return glava;} Atom *AmoRep() { return rep;} void UgurajClan(Atom *pok, Atom *IzaKojeg=NULL); // PUNI LISTU void BrisiListu(); // BRISE LISTU }; void Lista:: UgurajClan(Atom *pok, Atom *IzaKojeg) { if(IzaKojeg!=NULL) { if(IzaKojeg->Sljedeci()!=NULL) { IzaKojeg->Sljedeci()->StaviPrethodni(pok);} else rep=pok; pok->StaviSljedeci(IzaKojeg->Sljedeci()); IzaKojeg->StaviSljedeci(pok); } else { pok->StaviSljedeci(glava); if(glava!=NULL) { glava->StaviPrethodni(pok); } glava=pok; } pok->StaviPrethodni(IzaKojeg); } void Lista::BrisiListu() { Atom *temp=glava,*temp1=0; while(temp) { temp1=temp; temp=temp->Sljedeci(); delete temp1; } //--------------------------------- enum Tboja {BIJELA,CRNA,ZELENA,ZUTA,BEZ,NARANCASTA}; //---------------------------------------------------------- // VIRTUALNA KLASA GrafObjekt NASLJEDJUJE KLASU Atom class GrafObjekt:public Atom { private: Tboja Boja; public: void PostaviBoju(Tboja nova) {Boja=nova;} Tboja CitajBoju() { return Boja;} virtual void Crtaj(){} virtual void Brisi() {} virtual void Translatiraj(int,int){} void Pomakni (int px=0,int py=0); virtual ~GrafObjekt(){ cout << "GrafObjekt destruktor\n";} }; void GrafObjekt::Pomakni(int px, int py) { Brisi(); Translatiraj(px,py); Crtaj(); } //------------------------------------- //SLIJEDE NEKE JEDNOSTAVNE KLASE KOJE NASLJEDJUJU KLASU GrafObjekt class linija:public GrafObjekt { public: linija(int a=0,int b=0){} void Translatiraj(int px,int py) { cout << "translatiraj " << px << " " << py << "\n"; } void Brisi() { cout << "Brisi\n";} void Crtaj() { cout << "Crtaj\n"; } virtual ~ linija(){ cout << "linija destruktor\n";} }; //------------------------------------- class tocka:public GrafObjekt{ public: tocka(int a=0,int b=0){} void Translatiraj(int px,int py) { cout << "..................... " << px << " " << py << "\n"; } void Brisi() { cout << "Brisi............\n";} void Crtaj() { cout << "Crtaj.....................\n"; } virtual ~tocka(){ cout << "tocka destruktor\n";} }; //------------------------------------------ class elipsa:public GrafObjekt{ public: elipsa(int a=0,int b=0){} void Translatiraj(int px,int py) { cout << "ELIPSE " << px << " " << py << "\n"; } void Brisi() { cout << "Brisi ELIPSE\n";} void Crtaj() { cout << "Crtaj ELIPSE\n"; } virtual ~elipsa(){ cout << "elipsa destruktor\n";} }; //***************************************************************** int main() { Lista lista; // slijedi punjenje liste lista.UgurajClan(new linija); lista.UgurajClan(new elipsa); lista.UgurajClan(new tocka); lista.UgurajClan(new linija); // ovdje ide trazena funkcija lista.BrisiListu(); // brisanje return 0; } Imam klasu "GrafObjekt" koja ima virtualne funkcije "Crtaj(), Brisi() i Translatiraj(int,int), nju nasljedjuju tri klase "Linija", "Tocka" i "Elipsa", a ona sama nasljedjuje klasu "Atom". Pomocu objekta klase "Lista" punim listu tako sto alociram dinamicku memoriju za objekte klasa koji nasljedjuju klasu "GrafObjekt". Sam kod je dobar, medjutim trebam(a ne znam) napisati funkciju koja ce ici kroz listu i za svaki objekt liste pozvati odgovarajucu virtualnu funkciju npr. Crtaj(). Unaprijed hvala. |