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