leon84
29-05-2007, 15:23
Salve,
osservate questo codice :
#include <cstdlib>
#include <iostream>
using namespace std;
class B {
public:
int a,b;
B (int x=0,int y=0) : a(x),b(y) {}
void f();
};
class D : public B {
public:
int c,d;
D (int x=0,int y=0,int z=0,int t=0) : B(x,y),c(x),d(y) {}
void g();
};
void B::f() {
cout << "Il valore di a e' " << a << '\n' ;
cout << "Il valore di b e' " << b << '\n' ;
};
void D::g() {
cout << "Il valore di c e' " << c << '\n' ;
cout << "Il valore di d e' " << d << '\n' ;
};
int main(int argc, char *argv[])
{
B b(3,5);
b.f();
cout << "Richiamo funzione con puntatore a B \n" ;
B* pb = &b;
pb->f();
D* pd=static_cast<D*>(pb);
cout << "Richiamo funzione con puntatore a D \n" ;
pd->f();
system("PAUSE");
return EXIT_SUCCESS;
}
per fare un down-casting del puntatore pb alla classe derivata D ho usato un cast statico visto che è noto al tempo di compilazione il valore di pb.
In caso di polimorfismo e cioè se la funzione f() ad esempio fosse virtual sarebbe stato opportuno un cast dinamico. Ma in realtà a me funziona bene la conversione anche col cast-statico. Non ne comprendo la differenza. mi aiutate ?
osservate questo codice :
#include <cstdlib>
#include <iostream>
using namespace std;
class B {
public:
int a,b;
B (int x=0,int y=0) : a(x),b(y) {}
void f();
};
class D : public B {
public:
int c,d;
D (int x=0,int y=0,int z=0,int t=0) : B(x,y),c(x),d(y) {}
void g();
};
void B::f() {
cout << "Il valore di a e' " << a << '\n' ;
cout << "Il valore di b e' " << b << '\n' ;
};
void D::g() {
cout << "Il valore di c e' " << c << '\n' ;
cout << "Il valore di d e' " << d << '\n' ;
};
int main(int argc, char *argv[])
{
B b(3,5);
b.f();
cout << "Richiamo funzione con puntatore a B \n" ;
B* pb = &b;
pb->f();
D* pd=static_cast<D*>(pb);
cout << "Richiamo funzione con puntatore a D \n" ;
pd->f();
system("PAUSE");
return EXIT_SUCCESS;
}
per fare un down-casting del puntatore pb alla classe derivata D ho usato un cast statico visto che è noto al tempo di compilazione il valore di pb.
In caso di polimorfismo e cioè se la funzione f() ad esempio fosse virtual sarebbe stato opportuno un cast dinamico. Ma in realtà a me funziona bene la conversione anche col cast-statico. Non ne comprendo la differenza. mi aiutate ?