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

    [C++] classi derivate - definizione membri

    Ave, ho un dubbio.
    Se ho una classe base di questo tipo:
    class base
    {
    public:
    void funzione();
    }
    e una sua derivata,
    class derivata : public base
    {
    void funzione()
    {
    //codice
    }
    }

    La definizione di funzione della derivata non va a completare l'inizializzazione della base.
    insomma, accedendo alla classe derivata tramite un puntatore della sua base, richiamando funzione, non eseguo "//codice".
    Come posso inizializzare funzione, tramite derivata?
    Grazie in anticipo

  2. #2
    Non ho capito molto.
    Se riscrivi una funzione (metodo) in una classe derivata, sovrascrivi (fai l'override) del metodo base, quindi il metodo base viene sostituito da quello derivato.
    Se l'istanza è della base, esegui il metodo base, altrimenti quello derivato:

    codice:
    base b;
    b.funzione(); // metodo base
    
    base *b = new derivata();
    b.funzione(); // metodo derivata
    
    derivata d;
    d.funzione(); // metodo derivata
    lolide
    Java Programmer

    Informati

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    No, perchè base::funzione() non è dichiarato virtual.

    Se il metodo nella base è dichiarato virtual allora viene cercato il metodo con lo stesso nome più in giù nella gerarchia (il primo che non è dichiarato virtual), altrimenti, viene eseguito proprio il metodo chiamato.

    Dichiaralo come
    codice:
    virtual void funzione()
    e andrà ad eseguire quello della classe derivata.
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

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.