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)

Nom & Prénoms : Signature :

Note : /20
PARTIEL

Attention : Aucun document n'est autorisé et l'usage de smartphones est interdit.

Partie_1 (18pts) : Pour chaque question, cochez la ou les bonne(s) réponse(s) proposée(s).
Q.1 : 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 ;
a) n=6, p=40 b) n=45, p=12 c) autre : n= .... , p= ..... d) n=47, p=11

Q.2 : Quelle est la portée par défaut des attributs et des méthodes déclarées en P.0.0 ?
a) accessibles dans une classe quelconque ;
b) accessibles par une classe amie à la classe où ils sont définis ;
c) accessibles dans la classe où ils sont définis ;
d) accessibles dans une classe dérivée.

Q.3 : Corrigez les erreurs contenues dans le code suivant :


#include <iostream>

class point {
float abs; float ord;
public :
point(float , float ){ 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 ; }
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";
}

P a g e 1a | 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)

Q.4 : 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;

a) n=10 p=17 q=1 b) n=11 p=17 q=0 c) n=11 p=18 q=0

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


a) _doWhile b) 2bitparSeconde c) 9cent_huit
d) energie$$$ e) type_id f) Partie-Imaginaire

Q.6 : Le mot-clé this en langage C++ est utilisé :


a) dans les méthodes membres de la classe en se référant à l’instance en cours d’exécution ;
b) uniquement dans les méthodes constructeurs des sous-classes (dérivées) ;
c) pour déclarer une méthode virtuelle pure ;
d) dans la méthode main() lors de l’appel des méthodes par les instances en s’auto-référençant.

Q.7 : 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;
}
a) P3LMD b) 3LMD c) 3LMD
6MASTER P6MASTER P6MASTER
3LMD 3LMD P3LMD
de meme type ! Pas de meme type ! Pas de meme type !

Q.8 : Parmi les déclarations suivantes, lesquelles sont valides pour déclarer un tableau en C++ ?

a) char*car = new char[25]; b) double d[] = new double[20]; c) float tab[];


d) string St; e) string str[25]; f) int T[10];

P a g e 2a | 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)

Q.9 : Dans l’héritage en langage C++ :


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

Q.10 : Surcharger une méthode d’une classe consiste à :


a) utiliser le même nom de la méthode avec des types d’arguments différents ;
b) réécrire dans une classe dérivée une méthode héritée d’une classe mère ;
c) définir une méthode virtuelle ;
d) utiliser le même nom de la méthode dont le type de la variable de retour est différent.

Q.11 : 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;

a) i=10 , j=4 , n=1 b) i=10 , j=4 , n=0 c) i=11 , j=5 , n=1

Q.12 : Une méthode virtuelle définie dans une classe de base :


a) ne contient pas de code ;
b) constitue le mécanisme de polymorphisme en POO ;
c) devrait être définie dans les classes dérivées ;
d) doit obligatoirement appartenir à une classe abstraite ;

Q.13 : 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;
a) A: 3 , 6 , 4 , 4 b) A: 5 , 6 , 7 , 7 c) A: 5 , 5 , 4 , 7
B: 5 , 7 , 7 , 7 B: 5 , 15 , 9 , 9 B: 5 , 15 , 7 , 9

Q.14 : Dans une classe, un attribut déclaré protected est accessible :

a) par toutes les classes ; b) par les méthodes de la même classe ;


c) par les méthodes des classes dérivées ; d) par toutes les classes amies ;

Q.15 : Le mécanisme permettant de rendre les membres d'une classe invisibles à d’autres classes est :

a) l'héritage b) l'encapsulation c) le masquage d) le polymorphisme

Q.16 : 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;

a) n=6 p=3 b) n=1 p=2 c) n=2 p=4 d) n=3 p=6

P a g e 3a | 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)

Q.17 : Qu'est-ce que le masquage ?


a) de cacher une méthode membre héritée en définissant une méthode de même nom dans la classe fille.
b) d’utiliser l'opérateur de résolution de portée pour utiliser la méthode héritée.
c) de mettre tous les attributs en privé pour cacher l'implémentation aux utilisateurs.
d) d’avoir deux méthodes de noms semblables pour faire deux actions différentes.
Q.18 : Le code suivant, se compilera-t-il ?
Renault *m_Auto = new Renault ( ) ;
Clio *m_ClioCampus = new Clio ( ) ;
m_Auto = m_ClioCampus;
a) Oui b) Non c) Oui, si Renault hérite de Clio d) Oui, si Clio hérite de Renault

Partie_2 (02pts) : On veut calculer le produit d'une matrice par un vecteur en utilisant une méthode
amie. Pour ce faire, on vous propose les deux classes vecteur et matrice, définies ci-dessous.
Compléter le programme, en définissant une méthode amie aux deux classes, indépendante qui retourne un
vecteur correspondant au produit d’une matrice par un vecteur, dont le prototype vecteur produit (matrice,
vecteur) ;
///////////////// Programme : Produit d'une matrice par un vecteur. ////////////////////
#include<iostream>
using namespace std;
class matrice ;
class vecteur {
int v[5];
public:
vecteur(int tab[5]){ for (int i=0; i<5; i++) v[i] = tab[i]; }
void affiche(){ for (int i=0; i<5; i++) cout<<v[i]<<" " ; cout<<endl; }
friend vecteur produit (matrice, vecteur); //Déclaration d'amitié pour la méthode indépendante
};
class matrice {
int m[5][5];
public:
matrice(int tab[5][5]) { for(int i=0;i<5;i++) for(int j=0;j<5;j++) m[i][j] = tab[i][j]; }
void affiche() { for(int i=0;i<5;i++) {
for(int j=0;j<5;j++) cout<<m[i][j]<<" ";
cout<<endl; }
}
friend vecteur produit (matrice, vecteur) ; //Déclaration d'amitié pour la méthode indépendante
};
vecteur produit (matrice M, vecteur V){ /*Définition de la méthode indépendante*/
……………………………………………………………………………………………………………………………………………………………….
……………………………………………………………………………………………………………………………………………………………….
……………………………………………………………………………………………………………………………………………………………….
……………………………………………………………………………………………………………………………………………………………….
……………………………………………………………………………………………………………………………………………………………….
………………………………………………………………………………………………………………………………………………………………
} //////////////////////////////////////// FIN ////////////////////////////////////

P a g e 4a | 4

Vous aimerez peut-être aussi