Domanda

class Base {
    public:
    Base() {}

    void Foo(int x) {...}
};

class Derived : public Base {
    public:
    Derived(int args) {
        /* process args in some way */

        Foo(result);
    }
};

E 'permesso di chiamare un metodo della classe base nel costruttore della classe derivata? Immagino questo va bene come l'oggetto base deve essere completato, ma ho voluto verificare per ogni evenienza.

È stato utile?

Soluzione

  

E 'permesso di chiamare un metodo della classe base nel costruttore della classe derivata?

Sì. Basta guardare fuori per le funzioni virtual. Se una classe derivata da Derived sovrascrive una funzione virtuale, durante la costruzione Derived come sotto-oggetto di tale classe ulteriormente derivata, il tipo dinamico è sempre Derived, funzioni quindi nessun virtuali escluse in altre classi derivate sono chiamati. (Lo stesso vale per il distruttore, BTW.)

  

Mi immagino questo va bene come l'oggetto base deve essere completato, ma ho voluto verificare per ogni evenienza.

Il tuo ragionamento è giusto.

Altri suggerimenti

C'è un pericolo quando:
 1. il metodo è sottoposto a override
 2. il metodo chiama altri metodi che vengono sostituite

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top