Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C++] Ereditarietà e classi astratte

    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?

  2. #2
    Il costruttore di una classe base non può essere invocato dall'esterno, ma viene invocato dalle classi derivate. Qui trovi una spiegazione abbastanza chiara.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    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)?

  4. #4
    Quote Originariamente inviata da starcraftworld Visualizza il messaggio
    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?

    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:
    codice:
    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.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.