Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C++] Class:public

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    6

    [C++] Class:public

    Il titolo non è dei più azzeccati... cmq la domanda è la seguente: cosa comporta una dichiarazione del genere?

    class A
    {
    ...
    };

    class B : public A
    {
    ...
    };

    A naso oserei dire che la classe B "eredita" tutta la parte pubblica di A ma non ne sono troppo sicuro.

    Spero possiate aiutarmi

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    6
    VVoVe: Non lo sa nessuno??

    Ragazzi vi prego è un caso di primissima necessità visto che ho l'esame la prox settimana

  3. #3
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299
    A naso oserei dire che la classe B "eredita" tutta la parte pubblica di A ma non ne sono troppo sicuro.
    E' quasi giusto. In pratica B eredita i metodi di A in qualsiasi caso (anche senza public), ma, se usi public, puoi usare i metodi di A dentro il corpo di quelli di B. Ad esempio

    codice:
    class A
    {
        public:
            A();
            int Metodo_di_A();
    };
    
    class B: public A
    {
        public:
            B();
            int Metodo_di_B()
            {
                int x = Metodo_di_A();       //(*)
                return sqrt(x + 1);          //ad esempio...
            }
    };
    Omettendo public, in pratica, la riga (*) ti darebbe un errore di compilazione.

    cout << << endl;
    Svegliati, Neo. Matrix ti possiede...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: [C++] Class:public

    L'ereditarietà "pubblica" implica che i membri ereditati dalla classe figlia, mantengono la stessa protezione che avevano nella classe base.

    L'ereditarietà "protetta" comporta il fatto che i membri public della classe base divengono membri protected nella classe derivata.

    Con l'ereditarietà "privata" (che è di default) tutti i membri ereditati diventano privati.

    Non e' comunque possibile diminuire il grado di "protezione" dei membri ereditati. Per cui, quelli privati, restano comunque privati.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    6
    Ok capito... ma se sono davanti a una situazione del genere?

    class A
    {
    protected:
    int i;
    public:
    A(){i=o;cout<<"A"<<endl;}
    void virtual f()=0;
    void stampa(){cout<<"A"<<i<<endl;}
    };

    class B
    {
    int j;
    public:
    B(){j=1;cout<<"B"<<endl;}
    void f(){cout<<j<<''<<i<<endl;}
    void stampa(){cout<<"B"<<j<<endl;
    };

    int main()
    {
    B *b = new B;
    b->stampa(); (*********)
    //.....
    }

    (*********) Non c'è dell'ambiguità? Nel senso... mi viene eseguito il metodo dichiarato nella classe B o quello omonimo ereditato dalla classe A? (Non sono io che voglio complicare le notazioni, è un testo di esame che prevede di scrivere l'output del programma).

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    L'ereditarietà implica a volte (ed è il caso che presenti) l' "information hiding" ovvero il fatto che parte dell'informazione presente nella classe base venga "nascosta" da quella presente nella classe che eredita.

    Nel tuo caso (anche se non hai scritto che la B eredita dalla A ... forse hai dimenticato a scriverlo ... a proposito, usa i tag CODE altrimenti si comprende poco del codice ...), il metodo "stampa" della classe A e' "nascosto" dal metodo omonimo della classe B.

    Ma dato che il metodo "stampa" di A è pubblico, puoi accedere a questo indicandolo esplicitamente (per risolvere l'ambiguità)

    codice:
    b->A::stampa();

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 © 2025 vBulletin Solutions, Inc. All rights reserved.