Classi derivate in c++

di il
3 risposte

Classi derivate in c++

Salve a tutti sono nuovo di qui sto studiando c++ ma ho un dubbio che riguarda qualsiasi linguaggio ad oggetti,forse voi mi potete aiutare:

Supponete che io ho una classe base chiamata 'classe' con una stringa chiamata 'nome' come dato membro.
Adesso supponete che derivo altre 2 classi da questa classe base chiamate 'classe1' e 'classe2'con il sistema di ereditarieta'.
Il sistema di programmazione quindi copia la variabile nome nella classe1 e 2 giusto?

Ci sono quindi 2 variabili nome a cui io posso accedere dall'esterno tramite l'operatore punto
dopo aver creato l'oggetto:

int main(){

classe1 miaclasse1(); //chiama il costruttore della classe base + quello della classe1 derivata

classe2 miaclasse2();//chiama il costruttore della classe base + quello della classe2 derivata


miaclasse1.nome="emanuele";

miaclasse2.nome="stefano";

}

La classe base non e' stata toccata,cioe' se io accedo direttamente a 'classe' senza istanziarla e guardo la variabile nome essa ha un valore?

Inoltre se io nel costruttore della classe base inizializzo il valore di nome scrivendo nome="pippo" quando creo l'oggetto facendo :

classe1 miaclasse1();

il nome all'interno di miaclasse1=pippo?

Ho studiato il java e android adesso volevo completare con il c++ ma studiando su questo libro
c++ programming larry ulman e vedendo gli esempi mi sono reso conto di avere qualche lacuna che riguarda tutti i liguaggi ad oggetti.

Grazie

3 Risposte

  • Re: Classi derivate in c++

    Spero di esserti d'aiuto dandoti qualche dritta
    Supponete che io ho una classe base chiamata 'classe' con una stringa chiamata 'nome' come dato membro.
    Adesso supponete che derivo altre 2 classi da questa classe base chiamate 'classe1' e 'classe2'con il sistema di ereditarieta'.
    Il sistema di programmazione quindi copia la variabile nome nella classe1 e 2 giusto?
    Non viene copiato niente. Quando istanzierai un oggetto di tipo 'classe1' (o 'classe 2') verrà riservato dello spazio in memoria per contenere tutte le proprietà della classe1 compreso quelle derivate dalla classe base.
    La classe base non e' stata toccata,cioe' se io accedo direttamente a 'classe' senza istanziarla e guardo la variabile nome essa ha un valore?
    Ogni oggetto di quella classe avrà la sua variabile 'nome'.
    Inoltre se io nel costruttore della classe base inizializzo il valore di nome scrivendo nome="pippo" quando creo l'oggetto facendo :

    classe1 miaclasse1();

    il nome all'interno di miaclasse1=pippo?
    Esatto, perchè gli dai un valore di partenza.
  • Re: Classi derivate in c++

    Grazie mi sei stato di grande aiuto perche' alcuni libri scrivono che i membri di una classe base sono virtualmente copiati nelle classe derivata e io facevo fatica a capire.

    un ultima domanda:
    l'oggetto viene caricato in memoria quando io lo istanzio il libro dice che e' possibile in c++ chiamare un metodo di una classe senza che questa sia legata ad un oggetto e senza che i metodi siano definiti statici.
    Ecco la sintassi
    Classname::methodname();

    vale anche per le variabili membro della classe?
    posso fare
    Classname::nome della variabile=valore della variabile?
    Il libro non lo specifica quindi penserei di no ma non sono sicuro

    Se posso usare il metodo vuole dire che l'oggetto e' caricato in memoria e quando viene fatto?

    Grazie ancora
  • Re: Classi derivate in c++

    il libro dice che e' possibile in c++ chiamare un metodo di una classe senza che questa sia legata ad un oggetto e senza che i metodi siano definiti statici.
    Ecco la sintassi
    Classname::methodname();
    Ammetto che questo non lo so; considera però che un metodo non è altro che una funzione tradizionale che in più riceve un puntatore 'this' che punta all'oggetto.
    vale anche per le variabili membro della classe?
    posso fare
    Classname::nome della variabile=valore della variabile?
    Il libro non lo specifica quindi penserei di no ma non sono sicuro
    Di sicuro non lo puoi fare perchè la variabile non esiste in memoria; pensa ai membri di una struttura... fondamentalmente una classe non è altro che una struttura con delle funzioni per manipolarne i membri.
    Puoi accedere così alla variabile solo se definita come static, per cui ne esisterà una copia unica condivisa fra tutte le istanze della classe.
    Se posso usare il metodo vuole dire che l'oggetto e' caricato in memoria e quando viene fatto?
    Come ti dicevo il metodo non è altro che una funzione e quindi fisicamente non viene caricata in memoria, ci sarà sempre ma nell'area "codice" del programma. La particolarità di questa funzione è che riceve un puntatore all'oggetto (this) per accedere ai dati.
Devi accedere o registrarti per scrivere nel forum
3 risposte