Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 1 odgovor
  • 1.929 pregleda

Najnovija ↓

Private copy constructor u apstraktnoj klasi 20.06.2013. u 19:44 · pre 162 meseca #1
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...?
Potpis
EOF
Re: Private copy constructor u apstraktnoj klasi 20.06.2013. u 23:20 · pre 162 meseca #2
Konstruktor kopije se definiše kao privatan kada se želi zabranjivanje kopiranja objekata tog tipa. Poenta je da konstruktor kopije i operator dodele budu privatni, a da ti onaj copy() metod služi za pravljenje kopija, jer se on ponaša polimorfno.
Potpis
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
Sviđa mi se1
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme