/* Final Hiver 2000 Pour le programme suivant: */ #include class X { public: int a; X(int valeur):a(valeur) {} void f0() { cout << "X::f0" << endl; } virtual void f1() { cout << "X::f1" << endl; } }; class Y:public X { public: Y(int zz):X(zz) {} void f1() { cout << "Y::f1" << endl; f0(); } }; int main() { X x(0); Y y(1); X *px; Y *py; py = &y; y.f1(); // ligne 1 py->f1(); // ligne 2 px = &y; y.f1(); // ligne 3 px->f1(); // ligne 4 // px = py; // ligne 5 // py = px; // ligne 6 px = &y;px->f1(); // ligne 7 px = &x;px->f1(); // ligne 8 py = &y;py->f1(); // ligne 9 return 0; } /* Question -1- Les lignes 1 et 2 écrivent-elles la même chose? oui non qu'est ce qu'elles affichent? Question -2- Les lignes 3 et 4 écrivent-elles la même chose? oui non qu'est ce qu'elles affichent? Question -3- Indiquer toutes les fonctions qui seront appelées aux lignes suivantes: X::f0() X::f1() ligne 7 ligne 8 ligne 9 Question -4- Que se passe-t-il si on enlève les commentaires des lignes 5 et 6? Les transformations polymorphiques (conversions de types) sont-elles correctes? 4.1) px = py; // ligne 5 oui non pourquoi? 4.2) py = px; // ligne 6 oui non */