Vous êtes sur la page 1sur 4

Département d’électronique, Masters 1 Académiques (S1) 12 Février

2018
Durée : 1h30mn Programmation Orientée Objet en C++ (UEM1.1)

CORRIGE TYPE DU PARTIEL

Partie_1 (18pts ) : chaque Question est notée sur 01 point.


Q1 : Quelles seront les valeurs de n et p après exécution de la ligne d'instruction suivante :
int n=5, p=10; while(++n<=14) n+=4*p; ++p; cout<<"n= "<<n<<", p= "<<p<<endl ;
Rep : n=47, p=11

Q2 : Quelle est la portée par défaut des attributs et des méthodes déclarées en P.0.0 ?
Rep : - accessibles par une classe amie à la classe où ils sont définis ;
- accessibles dans la classe où ils sont définis ;

Q3 : Corrigez les erreurs contenues dans le code suivant :


#include <iostream>
using namespace std ;
class point {
float abs; float ord;
public :
point(float x , float y ){ abs = x; ord = y;}
point& operator=( const point &autre ) {
if ( this != &autre ) { abs = autre.abs;
ord = autre.ord; }
return *this; }
bool operator==(const point &autre) {
if (this->abs == autre.abs && this->ord == autre.ord) return true ;
else return false ; }
void affiche(){ cout<<"Le point ayant les coordonnees (x= "<<abs<<", y= "<<ord<<")"<<endl; }
} ;
int main(){
point *A = new point(5.4, 15.0);
point *B = new point(2.3, 1.5);
A ->affiche();
(*B). affiche();
if(A == B) cout << "A et B sont confondues\n";
else cout << "A et B ne sont pas confondues\n";
A = B;
A ->affiche();
(*B). affiche();
if(A == B) cout << "A et B sont confondues\n";
else cout << "A et B ne sont pas confondues\n";
return 0 ;
}

Q4 : Qu’affiche le code suivant ?


int n = 10, p = 15; bool q = n<p++ && ++p==17 || p++<++n ;
cout<<"n= "<<n<<" p= "<<p<<" q= "<<q<<endl;
Rep : n=10 p=17 q=1

P a g e 1|4
Département d’électronique, Masters 1 Académiques (S1) 12 Février
2018
Durée : 1h30mn Programmation Orientée Objet en C++ (UEM1.1)

Q5 : Quels identificateurs de variables ou de méthodes sont valides parmi ceux-là ?


Rep : _doWhile / energie$$$ / type_id

Q6 : Le mot-clé this en langage C++ est utilisé :


Rep : - dans les méthodes membres de la classe en se référant à l’instance en cours d’exécution ;

Q7 : Analyser le code suivant ; qu’affiche-il à l’exécution ?


#include <iostream>
#include <typeinfo>
using namespace std;
class LMD{
int l;
public : LMD(){ }
};
class MASTER : public LMD{
int m;
public : MASTER(){ }
};
main(){
LMD a;
MASTER* b = new MASTER();
LMD* c = new LMD();
cout << typeid(a).name()<<endl;
cout << typeid(b).name()<<endl;
cout << typeid(c).name()<<endl;
if(typeid(a) == typeid(c)) cout << "de meme type !" << endl;
else cout << "Pas de meme type !" << endl;
}
Rep : 3LMD
P6MASTER
P3LMD
Pas de meme type !

Q8 : Parmi les déclarations suivantes, lesquelles sont valides pour déclarer un tableau en C++ ?
Rep : char*car = new char[25]; / string St; / string str[25]; / int T[10];

Q9 : Dans l’héritage en langage C++ :


Rep : - une classe dérivée peut hériter de plusieurs classes de bases ;
- une classe de base peut avoir plusieurs classes dérivées (sous-classes) ;
- les instances de la classe dérivée sont aussi des instances de la classe de base ;

Q10 : Surcharger une méthode d’une classe consiste à :


Rep : - utiliser le même nom de la méthode avec des types d’arguments différents ;
- utiliser le même nom de la méthode dont le type de la variable de retour est différent.

Q11 : Qu’affiche le code suivant ?


int i = 10 , j = 3 ; bool n = ++i<13 && (j++>5 || i != ++j*2);
cout<<"i="<<i<<" , j="<<j<<" , n="<<n<<endl;

P a g e 2|4
Département d’électronique, Masters 1 Académiques (S1) 12 Février
2018
Durée : 1h30mn Programmation Orientée Objet en C++ (UEM1.1)

Rep : i=11 , j=5 , n=1

Q12 : Une méthode virtuelle définie dans une classe de base :


Rep : - ne contient pas de code ;
- constitue le mécanisme de polymorphisme en POO ;
- devrait être définie dans les classes dérivées ;

Q13 : Qu’affiche le code suivant ?


int x[3] = { 3, 6, 11 }; int y = 4; int &z = y;
int*p = x; *p = 5; int*q = &y; *q = 7;
cout << "A: " << x[0] <<" , "<< x[1] <<" , "<< y <<" , "<< z << endl;
*(p+1) = 15; z = *(x+2)-2;
cout << "B: " << x[0] <<" , "<< x[1] <<" , "<< y <<" , "<< z << endl;
Rep : A: 5 , 6 , 7 , 7
B: 5 , 15 , 9 , 9

Q14 : Dans une classe, un attribut déclaré protected est accessible :


Rep : - par les méthodes de la même classe ;
- par les méthodes des classes dérivées ;
- par toutes les classes amies ;

Q15 : Le mécanisme permettant de rendre les membres d'une classe invisibles à d’autres classes est :
Rep : - l'encapsulation

Q16 : Qu’affiche le code suivant ?


int n=1, p=2; n = (2*p++ > 2 * ++n)? 4*p : 3*n ;
cout<<"n= "<<n<<" p= "<<p<<endl;
Rep : - n=6 p=3

Q17 : Qu'est-ce que le masquage ?


Rep : - d’avoir deux méthodes de noms semblables pour faire deux actions différentes.
- de cacher une méthode membre héritée en définissant une méthode de même nom dans la classe fille.

Q18 : Le code suivant, se compilera-t-il ?


Renault *m_Auto = new Renault ( ) ;
Clio *m_ClioCampus = new Clio ( ) ;
m_Auto = m_ClioCampus;
Rep : - Oui, si Clio hérite de Renault

Partie_2 (02pts) : //Définition de la méthode indépendante, amie aux deux classes vecteur et matrice.
vecteur produit (matrice M, vecteur V)
{ vecteur r ;
for(int i=0; i<5; i++) { r.v[i]=0;
for(int j=0; j<5; j++)
{ r.v[i] += M.m[i][j] * V.v[j]; }
}

P a g e 3|4
Département d’électronique, Masters 1 Académiques (S1) 12 Février
2018
Durée : 1h30mn Programmation Orientée Objet en C++ (UEM1.1)

return r ;
}

P a g e 4|4

Vous aimerez peut-être aussi