Ciao a tutti, il codice in sč non č difficile da capire..
Si suppone che A,B,C,D siano classi polimorfe distinte, ed il main stampi in output "pippo pluto".codice:template<class X> X& fun(X& ref) { return ref; }; main() { B b; fun<A>(b); // 1 B* p = new D(); // 2 C c; try{ dynamic_cast<B&>(fun<A>(c)); // 3 cout << "topolino"; } catch(bad_cast) { cout << "pippo "; } if( !(dynamic_cast<D*>(new B())) ) cout << "pluto "; // 4 }
In pratica si deve indicare, per ognuna delle relazioni X<=Y (X č sottotipo di Y), se č vera, falsa o nč vera e nč falsa (cioč č possibile che X<=Y).
Si ottiene facilmente che:
B<=A vero (1)
D<=B vero (2)
C<=A vero (3)
C<=B falso (3)
B<=D falso (4)
Ora, non capisco come si possa dire che una relazione non sia nč vera nč falsa. Ad esempio, si ha che B<=A: "B sottotipo di A" č vera, il che significa che
1) il tipo B č uguale al tipo A
oppure
2) B č un sottotipo diretto o indiretto di A.
Considerando perņ che A e B sono classi distinte, vale solamente la 2) e quindi se B<=A č vera: si puņ dire con certezza che la relazione A<=B č falsa ?

Rispondi quotando