Ho questo codice che una volta compilato ed eseguito mi da un output "inaspettato".
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;
}
L'output di questo programma è 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.
Mentre io mi sarei aspettato il seguente:
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.
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.