C++ ereditarietà

di il
8 risposte

C++ ereditarietà

Ciao a tutti,
ho una domanda sulla ereditarietà

class classe01 : public classe02

e questo è un classico.

class classe01 : public classe02 : public classe03

esiste una cosa del genere?

Di solito per permettere alla classe01 di accedere alle classe02 e classe03 uso un puntatore a oggetto oppure un classe friend. Faccio bene, faccio male?

Grazie Lele

8 Risposte

  • Re: C++ ereditarietà

    IpChancellor ha scritto:


    Ciao a tutti,
    class classe01 : public classe02 : public classe03
    esiste una cosa del genere?
    Si, anche se in genere si cerca di non avere troppe classi base.

    Di solito per permettere alla classe01 di accedere alle classe02 e classe03 uso un puntatore a oggetto oppure un classe friend.
    Faccio bene, faccio male?
    Non c'è una risposta assoluta.
    In genere la discriminante è nelle parole "has a" oppure "is a".
    Ad esempio un'auto "è un" veicolo e "ha" quattro ruote.
    Non ha senso dire che un'auto "ha un" veicolo e quattro ruote.

    Qui c'è un articolo che può chiarire le idee:
    http://www.eptacom.net/pubblicazioni/pub_it/ered.htm
  • Re: C++ ereditarietà

    shodan ha scritto:


    IpChancellor ha scritto:Ciao a tutti,
    class classe01 : public classe02 : public classe03
    esiste una cosa del genere?

    Si, anche se in genere si cerca di non avere troppe classi base.
    mi fai vedere come si fa? Con quella dicitura mi crea un errore.

    Grazie per l'articolo lo leggo.
    Lele
  • Re: C++ ereditarietà

    IpChancellor ha scritto:


    class classe01 : public classe02
    , public classe03 , public class 0x etc
  • Re: C++ ereditarietà

    shodan ha scritto:


    IpChancellor ha scritto: class classe01 : public classe02
    , public classe03 , public class 0x etc
    Una domanda, io utilizzavo i puntatori a oggetto per poter accedere agli elimenti di una classe .

    con

    class classe01 : public classe02 , public classe03

    si accede e riceve ai dati per valore o sempre per indirizzi/puntatori?
    Grazie
    Lele
  • Re: C++ ereditarietà

    Questo dubbio mi suona come se tu non abbia mai utilizzato l'ereditarietà.
    Accedi a dati e funzioni delle classi base come se fossero proprie della classe derivata, ma compatibilmente con gli specificatori d'accesso delle classi base.
    Se un dato o funzione è privato nella classe base resterà tale nella classe derivata;
    se un dato o funzione è protetto nella classe base diventerà protetto nella classe derivata;
    se un dato o funzione è pubblico nella classe base resterà pubblico.

    Se hai altri dubbi scrivi un po' di codice "dubbioso" e ne discutiamo.
  • Re: C++ ereditarietà

    Questo dubbio mi suona come se tu non abbia mai utilizzato l'ereditarietà.
    in effetti ho iniziato a usarla ieri, conoscevo la usa esistenza ma ho sempre utilizzato i puntatori ad oggetto per poter accedere a una classe. Funzionano uguale, qual'è il modo migliore per sciverilo?
    #include "container.h"
    #include "createcalendar.h"
    
    #include "string"
    using std::string;
    
    class Display
    {
    public:
        Display(CreateCalendar *myCalendar, Container *myContainer);
    
    #include "container.h"
    #include "createcalendar.h"
    
    #include "string"
    using std::string;
    
    class Display : public CreateCalendar, public Container
    {
    public:
        Display();
  • Re: C++ ereditarietà

    In questo caso la prima versione, nel senso che Display non è ne un CreateCalendar ne un Container per cui ereditare da essi è sbagliato.
    Rimane da vedere perché devi usare dei puntatori e non direttamente gli oggetti.
    
    
    class Display
    {
    public:
        Display(CreateCalendar myCalendar, Container myContainer);
    
    

    Però dovresti mostrare il codice delle due classi.
  • Re: C++ ereditarietà

    Ciao Shodan,

    si certo il codice non è un problema, uso gdrive se hai gmail e posso aggiungerti direttamente ai miei collaboratori e vedi le modifiche in tempo reale

    Oppure se non c'è l'hai posso linkarlo qui.
    Dimmi tu.
    Lele

    Ps
    In questo caso la prima versione, nel senso che Display non è ne un CreateCalendar ne un Container per cui ereditare da essi è sbagliato.
    Fanno parte di un programma ogni classe fa solo un specifico compito ma poi passa o riceve i dati elaborati
Devi accedere o registrarti per scrivere nel forum
8 risposte