PDA

Visualizza la versione completa : [C++] EreditarietÓ e classi astratte


starcraftworld
12-10-2014, 14:26
Supponiamo di trovarci a programmare il gioco della dama, posso sfruttare l'ereditarietÓ per definire una classe astratta Pezzo dalla quale poi ricaver˛ le classi derivate Pedina e Dama.
Mi stavo chiedendo a cosa serve definire il costruttore della classe Pezzo visto che non pu˛ essere istanziata e di conseguenza cosa devo far fare al costruttore di questa classe?

MItaly
12-10-2014, 16:21
Il costruttore di una classe base non pu˛ essere invocato dall'esterno, ma viene invocato dalle classi derivate. Qui (http://www.learncpp.com/cpp-tutorial/114-constructors-and-initialization-of-derived-classes/) trovi una spiegazione abbastanza chiara.

starcraftworld
13-10-2014, 14:20
Allora non mi Ŕ chiara una cosa...
I campi della classe base come ad esempio il colore di un pezzo, che sono anche ereditati dalla classe derivata, vengono inizializzati due volte quando creo un nuovo oggetto della classe derivata (rispettivamente dal costruttore della classe derivata e da quello della classe base)?

MItaly
13-10-2014, 18:38
Allora non mi Ŕ chiara una cosa...
I campi della classe base come ad esempio il colore di un pezzo, che sono anche ereditati dalla classe derivata, vengono inizializzati due volte quando creo un nuovo oggetto della classe derivata (rispettivamente dal costruttore della classe derivata e da quello della classe base)?
Uhm, hai letto l'articolo che ti ho linkato? :stordita:

Quando derivi da una classe, viene sempre richiamato il costruttore della classe base; se non lo richiami esplicitamente viene chiamato il costruttore di default, altrimenti puoi/devi richiamare un costruttore parametrico, a cui deleghi l'inizializzazione di tutti i campi della classe base.

Nel tuo caso, avrai probabilmente una cosa del tipo:


class Pezzo
{
private:
Color _color;
public:
Pezzo(Color color) : _color(color) {}

Color getColor() { return _color; }
};

class Dama : public Pezzo
{
public:
Dama(Color color) : Pezzo(color) {}
};

Come vedi, il costruttore di Dama delega l'inizializzazione del colore a quello di Pezzo.

Loading