[ glorius @ 20.06.2013. 18:44 ] @
Radio sam sa clone() funkcijom za kopiranje polimorfnih klasa i tu mi je skoro sve jasno. Skoro sam citao neki clanak i tu je spomenuto da bi dobro dizajnirana apstraktna klasa trebala da ima PRIVATE copy constructor. Do sada sam uvek pravio copy constructor apstraktne klase kao public jer nisam mnogo brinuo o tome. 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; }; 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...? |