[c++] overloading nella classe derivata
Ciao a tutti, sono alle prime armi con la programmazione ad oggetti, e volevo capire bene come si comporta il compilatore di fronte a una classe base e una sua derivata aventi un metodo con lo stesso nome ma implementato diversamente.
In pratica volevo chiarire il significato di "in un eredità public viene sempre chiamata la proprietà applicabile più specifica"
Ho scritto questo codice:
Volevo vedere se veniva chiamato il metodo di Dad (nome=0) o il metodo di Son(nome=1).
Il problema è che al campo nome viene attribuito un numero casuale, non viene attribuito o 0 o 1, perchè???
In pratica volevo chiarire il significato di "in un eredità public viene sempre chiamata la proprietà applicabile più specifica"
Ho scritto questo codice:
#include <cstdlib> #include <iostream> using namespace std; class Dad{ public: int nome; int ctrl; int Get(){ nome=0; }; }; class Son: public Dad{ int genitore; int Get(){ nome=1; }; }; void f1(Dad d){ d.Get(); } int main(int argc, char *argv[]) { Son s; Dad d; f1(s); cout<<s.nome<<endl; system("PAUSE"); return EXIT_SUCCESS; }
Volevo vedere se veniva chiamato il metodo di Dad (nome=0) o il metodo di Son(nome=1).
Il problema è che al campo nome viene attribuito un numero casuale, non viene attribuito o 0 o 1, perchè???
Risposte
Perché f1 non cambia s.
Come non la cambia? Io gli passo come parametro Dad d, e su d chiamo il metodo Get() che cambia il nome..
Ti suggerisco di ripassarti la parte del passaggio di parametri per valore e per riferimento.
Grazie vict85, problema risolto:
#include <cstdlib> #include <iostream> using namespace std; class Dad{ public: int nome; int ctrl; virtual int Get(){ nome=0; }; }; class Son: public Dad{ int genitore; int Get(){ nome=1; }; }; void f1(Dad *d){ d->Get(); } int main(int argc, char *argv[]) { Son* s; s=new Son; f1(s); cout<<s->nome<<endl; system("PAUSE"); return EXIT_SUCCESS; }