Ho questo codice che una volta compilato ed eseguito mi da un output "inaspettato".
L'output di questo programma è il seguente:codice:#include <iostream> using namespace std; class A { protected: int i; public: A(){ i = 0; cout << "A" << endl;} void virtual f() = 0; void stampa(){ cout << "A " << i << endl;} }; class B: public A { 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; cout << "Prova:" << endl; b->f(); b->stampa(); return 0; }
Mentre io mi sarei aspettato il seguente:codice:[Session started at 2008-12-28 18:13:01 +0100.] A B Prova: 1 0 B 1 The Debugger has exited with status 0.
Secondo me non essendo definita virtual la funzione stampa nella classe A, dovrebbe essere chiamata quando viene letto l'istruzione b->stampa(). Comunque sicuramente devo avere qualche idea confusa sul polimorfismo pertanto aspetto chiarimenti, grazie come sempre per l'aiuto.codice:[Session started at 2008-12-28 18:13:01 +0100.] A B Prova: 1 0 A 0 The Debugger has exited with status 0.

Rispondi quotando