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

[Zadatak] klasa Predmet

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] klasa Predmet

[ Pregleda: 2362 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Slave_82
student

Član broj: 184616
Poruke: 2
79.101.175.*



Profil

icon [Zadatak] klasa Predmet13.06.2008. u 13:06 - pre 193 meseci
OK, moram da zavrsim domaci iz c++ koji ne bi trebao da bude preterano tezak ali neke stvari mi nisu jasne.

Zadatak je sledeci: klasa Predmet koja ima neku velicinu, iz nje izvedena klasa UporedljiviPredmet koja ima virtuelne metode za poredjenje velicine predmeta i iz nje izvedena klasa Artikal koja poredi imena artikala. E sad takodje postoji i klasa Zbirka koja predstavlja listu Predmeta. Klasa UredjenaZbirka je sortirana lista predmeta a klasa Skladiste je sortirana lista Artikala. E sad moj problem je sledeci, napravio sam klase Predmet, UporedljiviPredmet, Artikal i Zbirka i to sve lepo radi, medjutim zanima me kako da odradim (i da li moze uopshte) da klasa UredjenaZbirka nasledi klasu Zbirka posto koristi drugi tip podatka (UporedljiviPredmet) tako da sve one metode pisane za prvobitnu klasu ne rade.

Ja mogu da napravim da to radi bez ikakvog nasledjivanja (3 liste, svaka koristi razlicit predmet) ali u sustini pisem isti kod 3 puta samo sa drugacijim tipovima podataka. Ne znam, mozda nisam bio najjasniji ali ako neko ima neku ideju ili bilo kakav savet hvala unapred. Poz
 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
*.static.sbb.rs.



+1 Profil

icon Re: [Zadatak] klasa Predmet13.06.2008. u 14:20 - pre 193 meseci
Zbirka radi sa klasom Predmet, samim tim radi i sa UporedljiviPredmet jer UporedljiviPredmet jeste i Predmet. Samim tim ce i UredjenaZbirka prilikom nasledjivanja klase Zbirka raditi sa Predmet i UporedljiviPredmet. Npr.
Code:

class Predmet
{
public:
        Predmet() {}
};


class UporedljiviPredmet : public Predmet
{
public:
        UporedljiviPredmet() {}
};


class Zbirka
{
private:
        Predmet p[10];
public:
        Zbirka() {}
};


class UredjenaZbirka : public Zbirka
{
public:
        UredjenaZbirka() {}
};

Dakle, klasa UredjenaZbirka (kao i Zbirka) ce raditi sa obe Predmet i UporedljiviPredmet.
(Naravno, ostaje problem drzanja objekata jer ovako ce dolaziti do staticke konverzije i virtuelne funkcije se nece pozivati, pa treba baratati sa objektima na heapu.)
Da li si zeleo ovako nesto ili hoces da UredjenaZbirka radi samo sa UporedljiviPredmet a Zbirka samo sa Predmet i jos da se nasledjuju?

Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.ptt.yu.



+395 Profil

icon Re: [Zadatak] klasa Predmet13.06.2008. u 15:37 - pre 193 meseci
Ako sam te dobro razumeo napravis klasu Zbirka koja ce sadrzati listu bazne klase Predmet
A posle toga samo nasledjujes Zbirka klasu kako bi imao odredjen tip sortinga u njoj
Code:


class Zbirka
{
private:
        std::vector<Predmet*> predmeti ; 
public:
     Zbirka() {predmeti.resize(100) ; } // npr. napravis 100 elemenata 
      void add (Predmet* pPredmet) {
         predmeti.push_back(pPredmet) ;
     } 
};
class UporedlljivaZbirka : public Zbirka 
{
public : 
  UporedlljivaZbirka (): Zbirka() {}  
  void SortByUporedljiviPredmet () ; 

    
} ; 
class Skladiste : public Zbirka 
{
public : 
    Skladiste () : Zbirka () { } 
    void SortByArtikal () ; 

} ; 



Negde u tvom kodu :

Code:


UporedlljivaZbirka UPLista ; 
Predmet * pUporedPredmet= new UporedljiviPredmet() ; 
UPLista.add(pUporedPredmet) ; 


Skladiste skladiste  ; 
Predmet * pArtikal= new Artikal() ;
skladiste.add(pArtikal) ; 



Viva lollapalooza
 
Odgovor na temu

Slave_82
student

Član broj: 184616
Poruke: 2
79.101.175.*



Profil

icon Re: [Zadatak] klasa Predmet13.06.2008. u 16:16 - pre 193 meseci
Hvala na odgovorima probacu da ovo odradim, moram malo da prilagodim kod.

Npr Zbirka izgleda ovako

Code:


class Zbirka{

protected:
       struct Elem{
              Predmet predmet; Elem* sled;
              Elem(Predmet& pr){ predmet = pr; }

     };

    Elem* prvi;

public:

Zbirka(){ prvi = NULL; }

//Metode koje dodaju element u listu, izlistavanje itd...

};




E sad ja nemam predstavu kako da izvedem klasu UredjenaZbirka koja ce da bude sortirana zato sto klasa Predmet nema metode za uporedjivanje velicine. Koliko ja shvatam ona mora da radi sa klasom UporedljiviPredmet. I tu nastaje problem...nije mi jasno kako to da izvedem...pogotovu sto ne baratam sa listama preterano dobro. U svakom slucaju hvala, probacu, nisam znao da mogu da uradim Predmet * pr = new UporedljiviPredmet(), mozda je u tome caka.
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-1.sezampro.yu.



+395 Profil

icon Re: [Zadatak] klasa Predmet13.06.2008. u 17:42 - pre 193 meseci
Citat:

E sad ja nemam predstavu kako da izvedem klasu UredjenaZbirka koja ce da bude sortirana zato sto klasa Predmet nema metode za uporedjivanje velicine. Koliko ja shvatam ona mora da radi sa klasom UporedljiviPredmet. I tu nastaje problem...nije mi jasno kako to da izvedem...pogotovu sto ne baratam sa listama preterano dobro. U svakom slucaju hvala, probacu, nisam znao da mogu da uradim Predmet * pr = new UporedljiviPredmet(), mozda je u tome caka.


Naravno da mozes ...u tome je i sustina polimorfizma tj. nasledjivanja ....
U klasi UporedlljivaZbirka implementiraj sortiranje zasnovano na virtualnom operatoru poredjenja iz UporedljiviPredmet

Code:
 

#include <vector> 
using namespace std ; 

class UporedljiviPredmet : public  Predmet 
{
public :
   UporedljiviPredmet () : Predmet() {} 
   virtual bool operator ==  (UporedljiviPredmet & rhs){} //ovde implementiraj poredjenje 
   virtual  bool operator != (UporedljiviPredmet & rhs) {}  //ovde implementiraj poredjenje 

} ;

class Zbirka
{
private:
        std::vector<Predmet*> predmeti ; 
     // mozes koristiti i svoju strukturu Elem .. ja sam stavio vector zbog pojednostavljenja 
public:
      Zbirka(int size) {predmeti.resize(size) ; } // npr. napravis 100 elemenata 
      void add (Predmet* pPredmet) {
         predmeti.push_back(pPredmet) ;
     } 
};

class UporedlljivaZbirka : public Zbirka 
{
public : 
  UporedlljivaZbirka (): Zbirka() {}  
  
  void SortByUporedljiviPredmet ()  
  { 
      UporedljiviPredmet * p0 = (UporedljiviPredmet*)predmeti.at(0);  
      UporedljiviPredmet * p1 = (UporedljiviPredmet*)predmeti.at(1) ; 
      
     if (*p0 == *p1)  //poredjenje ce biti po operatorima iz klase UporedljiviPredmet
     {
         // itd ..... 
     } 
   }

} ; 
   


Isti princip vazi i za klasu Artikal i Skladiste .....

EDIT :
Ima i drugog nacina da se to uradi a mozda ce ti biti jasniji ceo koncept nasledjivanja ..
Npr .ako imas u klasi Predmet virtualnu funkciju poredjenja (operator ==)

Code:

class UporedljiviPredmet :public  Predmet 
{
public :
   int nBroj ; 
   UporedljiviPredmet () : Predmet() {} 
   virtual bool operator != (Predmet& rhs){}
    virtual  bool operator ==  (Predmet& rhs) 
    {
       UporedljiviPredmet& lhs = (UporedljiviPredmet&)rhs ;
       return nBroj == lhs.nBroj;
    } 

} ;

//sort metoda

UporedlljivaZbirka UPLista ;
Predmet * p0= new UporedljiviPredmet () ;
Predmet * p1= new UporedljiviPredmet () ;
UPLista.add(p0) ; 
UPLista.add(p1) ; 

Predmet* p0 =  UPLista.predmeti.at(0) ; 
Predmet* p1 =  UPLista .predmeti.at(1) ;  

if (*p0 == *p1) 
{
 .....
}



[Ovu poruku je menjao deerbeer dana 13.06.2008. u 19:55 GMT+1]

[Ovu poruku je menjao deerbeer dana 14.06.2008. u 12:16 GMT+1]
Viva lollapalooza
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] klasa Predmet

[ Pregleda: 2362 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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