Evo koda pa da objasnim sta mi nije jasno.
Code:
class Base
{
public:
Base() {}
virtual Base* clone() const = 0;
protected: // !!! Mora biti protected da bi derived klasa pristupila copy constructor-u bazne klase da bi se ceo objekat konstruisao
Base(const Base& rhs)
{
baseData = rhs.baseData;
}
private:
int baseData;
};
class Derived : public Base
{
public:
Derived(){}
Derived(const Derived& rhs)
: Base(rhs) // !!! Pozivanje baznog konstruktora
{
derivedData = rhs.derivedData;
}
Base* clone() const // !!! Kopiranje objekta
{
Base* pClone = new Derived(*this);
return pClone;
}
private:
int derivedData;
};
class Base
{
public:
Base() {}
virtual Base* clone() const = 0;
protected: // !!! Mora biti protected da bi derived klasa pristupila copy constructor-u bazne klase da bi se ceo objekat konstruisao
Base(const Base& rhs)
{
baseData = rhs.baseData;
}
private:
int baseData;
};
class Derived : public Base
{
public:
Derived(){}
Derived(const Derived& rhs)
: Base(rhs) // !!! Pozivanje baznog konstruktora
{
derivedData = rhs.derivedData;
}
Base* clone() const // !!! Kopiranje objekta
{
Base* pClone = new Derived(*this);
return pClone;
}
private:
int derivedData;
};
Ovo lepo radi jedino sto protivreci dizajnu o kojem sam citao na nekoliko mesta ali nisam mogao da nadjem objasnjenje zasto spominju da treba biti private ( a ne protected ).
Jedino ako ne misle da treba da bude private u slucaju da abstract klasa nema podataka...?
EOF