Hej wszystkim,
próbuję ogarnąć wzorzec projektowy prototyp i nie mogę pojąć w nim pewnych aspektów, mianowicie coś takiego:
class Monster
{
public:
virtual ~Monster() {}
virtual Monster* clone() = 0;
// Other stuff...
};
class Ghost : public Monster {
public:
Ghost(int health, int speed)
: health_(health),
speed_(speed)
{}
virtual Monster* clone()
{
return new Ghost(health_, speed_);
}
private:
int health_;
int speed_;
};
Czy wywołanie po dwukropku zmiennych health i speed dodaje do klasy bazowej te zmienne? Wiem że jest to narzucenie wartości klasie bazowej ale przecież nie ma w niej tych zmiennych.
A druga sprawa w innym przykładzie występuje w klasie pochodnej coś takiego:
Dlugopis(const int dlugosc, const QString kolor, int paczka = 0 )
: dlugosc( dlugosc ), kolor( kolor ), paczka(new int(paczka))
{
}
Dlugopis( const Dlugopis & kopia )
: dlugosc( kopia.dlugosc )
, kolor( kopia.kolor )
{
this->paczka = new int(kopia.getPaczka());
}
w klasie pochodnej i teraz nie rozumiem, czemu ta klasa ma dwa konstruktory? Rozumiem że jedna jest od kopiowania ale czy ktoś mógłby wytłumaczyć dlaczego to tak wygląda?