|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2004
Città: Napoli
Messaggi: 2029
|
[C++] ereditarietà con le classi
vi metto sto codice sorgente
Codice:
#include <string> using namespace std; class Base{ public: Base(const string &n):nome(n){} string &get_nome(){return nome;} private: string nome; }; class Derivata:public Base{ public: Derivata(const string &n):Base(n){} string &get_nome(){return nome;} private: string nome; }; int main(){ Base b("BASE"); Derivata d("DERIVATA"); cout<<b.get_nome(); cout<<endl; cout<<d.get_nome(); system("PAUSE"); return 0; } |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4741
|
per quello che ne so...
...l' eredita' implica che un oggetto istanza della classe drivata sia anche di classe base, e in effetti, quando lo crei, vengono chiamati tutti i costruttori della catena di derivazione, a ritroso: prima quello della classe Derivata, poi quello della Base
ho come l' impressione il costruttore della Base ricambi il nome dell' oggetto quando allochi il Derivata: non sono sicuro sia una buona idea avere un dato con lo stesso identificatore nella base e nella derivata..
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate
Ultima modifica di jappilas : 07-06-2005 alle 11:49. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
E' perche il campo nome è stato ridefinito all'interno della classe Derivata e quindi quando il costruttore di Base imposta tale campo sta impostando il campo di Base, mentre l'omonimo campo di Derivata resta non inizializzato. Derivata infatti ridichiara nuovamente il campo nome cosicchè all'interno di Derivata il campo nome di Base viene oscurato da quello di derivata.
Quando invochi il metodo getString sull'oggetto derivato, il metodo ti restituisce il campo di Derivata che è appunto non inizializzato. Non è una buona pratica ridefinire campi, se non veramente necessario.
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jul 2004
Città: Napoli
Messaggi: 2029
|
avete ragione raga.
errore di distrazione, non riuscivo a capire l'errore. grazie delle spiegazioni. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:00.