0% ont trouvé ce document utile (0 vote)
55 vues3 pages

DS Poo 2017 2018

Ce document est une évaluation écrite pour un cours de Programmation Orientée Objet à l'Université de la Manouba, comprenant des exercices sur la construction de classes en C++, des questions de réflexion sur les constructeurs et destructeurs, ainsi que des exercices pratiques sur l'implémentation de classes. Les étudiants doivent justifier leurs réponses et fournir des implémentations de classes spécifiques, notamment pour les classes 'ChifAR' et 'Sac'. L'évaluation se compose de plusieurs exercices notés, totalisant 20 points.

Transféré par

medaminhadjsoyeh
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
55 vues3 pages

DS Poo 2017 2018

Ce document est une évaluation écrite pour un cours de Programmation Orientée Objet à l'Université de la Manouba, comprenant des exercices sur la construction de classes en C++, des questions de réflexion sur les constructeurs et destructeurs, ainsi que des exercices pratiques sur l'implémentation de classes. Les étudiants doivent justifier leurs réponses et fournir des implémentations de classes spécifiques, notamment pour les classes 'ChifAR' et 'Sac'. L'évaluation se compose de plusieurs exercices notés, totalisant 20 points.

Transféré par

medaminhadjsoyeh
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

UNIVERSITE DE LA MANOUBA ANNEE UNIVERSITAIRE

-----¤¤¤¤----- 2017-2018
ECOLE NATIONALE DES SCIENCES
DE L'INFORMATIQUE

Evaluation écrite
Matière : Programmation Orientée Objet Date : 14 mars 2018
Niveau : II1 Durée: 1.5H
Enseignants : I. FLISS, W. CHAKER, R. CHEBIL, I. BOUKHRIS, C. BEN ABDELKADER, M-A. Documents : non autorisés
MEZGHICH Nb pages : 3

Il sera tenu compte de la présentation et de la clarté de vos réponses

Exercice1 : Questions de réflexions (7 pts)

Question1 : Choisir LA ou LES bonnes alternative(s) tout en justifiant votre réponse pour
chacune des questions suivantes (Toute réponse non justifiée est non notée) : (3.5 pts)

1) Peut-on construire les instances b1 et b2 dans le code C++ suivant si tous les constructeurs
de la classe B sont déclarés privés?
int main(){
B b1 ;
B b2(5) ;
return 0;
}
a) oui, il est possible de construire les deux instances
b) oui, il est possible de construire une seule instance
c) non, il n’est pas possible de construire les deux instances
Justification :
2) Un destructeur est appelé dans le cas :
a) d’un appel à « delete [ ] ».
b) d’une variable locale qui quitte sa portée.
c) d’un objet automatique à la fin de la fonction main
d) d’un appel à « delete ».
e) d’aucune des réponses précédentes.
Justification :
3) Le compilateur C++ génère automatiquement :
a) un constructeur avec 0 argument (paramètre) si la définition de la classe contient
d’autres constructeurs et ne contient pas de constructeur avec 0 argument
b) un constructeur de copie si la définition de la classe ne contient pas de constructeur de
copie
c) l’opérateur== si la définition de classe ne contient pas d'opérateur ==
d) l’opérateur= si la définition de classe ne contient pas d'opérateur =
e) l'opérateur + si la définition de classe ne contient pas d'opérateur +
f) le destructeur si la définition de classe ne contient pas de destructeur
Justification :
4) Soient les déclarations suivantes :
int p ;
float f ;
int fct(float, int) ;
int fct(int, float) ;

1/3
Lequel(s) des appels suivants provoque(nt) une ambiguïté :
a) fct(p,p) ;
b) fct(f,f) ;
c) fct(f, p);
d) fct(p,f);
Justification :

Question2: Soit le code C++ suivant : (3.5 pts)

/*1*/ void f(float & fP1, int iP2, float *fP3)


/*2*/{*fP3=fP1+iP2; }
/*3*/int main() {
/*4*/float fV1=2.4;
/*5*/int iV2=2;
/*6*/float fV3=1.54;
/*7*/const int *ptr=new int(7);
/*8*/f(fV1,iV2,&fV3) ;
/*9*/f(&fV1,iV2,&fV3) ;
/*10*/f(fV1,5,fV3) ;
/*11*/f(4,5,&fV3) ;
/*12*/for ( int iBoucle=0 ;iBoucle <10 ;iBoucle++) {
/*13*/ int iBoucle2 ;
/*14*/ iBoucle2=iBoucle+*ptr ;
/*15*/(*ptr)++ ; }
/*16*/cout<<"Valeur de iBoucle2" <<iBoucle2<<endl ;
/*17*/return 0; }
Indiquez si ce code compile ou pas ? S’il compile indiquez l’affichage produit sinon
précisez la ou les instruction(s) erronée(s) et proposez une correction pour chaque erreur
recensée.

Exercice2 (7 pts)

Soit la déclaration en C++ de la classe ‘ChifAR’ qui permet de conserver un nombre entier en
chiffres arabes et en chiffres romains.
const int MAX =20; /*correspond à la taille maximale du tableau de caractères
NombreRomain*/

class ChifAR
{
int NombreArabe; // nombre entier en chiffres arabes
char * NombreRomain; // nombre en chiffres romains
public:
ChifAR (int NbArabe=1);
ChifAR (char * NbRomain);
char * GetNombreRomain(); // retourne le nombre romain
int GetNombreArabe() const; // retourne le nombre arabe
void SetNombreRomain(char * C);
void SetNombreArabe(int N);
void ConvertirNombreRomain(); /* selon l'attribut NombreArabe
détermine l'attribut NombreRomain*/
void ConvertirNombreArabe(); /* selon l'attribut NombreRomain
détermine l'attribut NombreArabe*/
};
1. Donnez l’implémentation (la définition : le fichier .cpp) de la classe ChifAR (Vous
pouvez utiliser les méthodes ConvertirNombreRomain()et ConvertirNombreArabe()
sans écrire leurs codes. ). (3.5 pts)
2. Pensez-vous qu’il est utile de définir un destructeur pour la classe ChifAR. Dans
l’affirmative, donner son corps. (0.5 pts)

2/3
3. Donnez la déclaration et l’implémentation des méthodes et\ou les fonctions à
rajouter pour que la fonction main() suivante s’exécute convenablement : (3 pts)
int main(){
ChifAR c, c1("V") ;
ChifAR c2=c1 ;
c=c1;
c2= c1+c;
cout<<c2<<endl; /* L’affichage attendu a le format suivant : le nombre arabe est 10
et le nombre romain est X */
return 0 ;
}

Exercice3 (6 pts)

Nous nous proposons dans cet exercice de déclarer et implémenter en C++ une classe,
nommée ‘Sac’, qui permet de représenter des sacs contenant des ballons. Voici la déclaration
de la classe ‘Ballon’ à considérer :
class Ballon {
string identificateur;
// pour identifier un ballon
int taille; // taille du ballon
public:
Ballon() ;//constructeur par défaut
Ballon(string, int); // constructeur paramétré
~Ballon() ;//destructeur
};

Un sac est défini par les attributs suivants :


– un type de sac (défini par un entier dont la valeur fera référence au type de sac : 1 pour sac
plastique, 2 pour sac-à-dos...),
– le nombre d’éléments présents dans le sac,
– un tableau dynamique de ballons
Par exemple, un objet de la classe ‘Sac’ contenant la valeur 1 pour le premier attribut et 2
pour le deuxième représente un sac plastique contenant deux ballons.
On souhaite implémenter les méthodes suivantes au sein de la classe ‘Sac’:
- ajouter_element (Ballon), permet d’ajouter un ballon dans le sac. Un ballon est
toujours ajouté au début du tableau.
- enlever_element (), permet de retirer le dernier ballon ajouté dans le sac.
- taille(), permet de retourner le nombre d’éléments effectivement présents dans le sac.
- fixer_type (int), permet de fixer le type de sac. Cette méthode prend en paramètre le
nouveau type de sac.
- lire_type(), permet de retourner le type de sac.
Travail à faire :
1. Donnez la déclaration et l’implémentation de la classe ‘Sac’. (3.5 pts)
2. Écrivez une fonction main qui déclare deux objets sac1 et sac2 de la classe ‘Sac’. Ces
deux objets doivent avoir des types différents. Donnez le code qui remplit le premier
sac avec 10 objets ballons puis qui le vide pour remplir le second sac avec ces
éléments. (1 pt)
3. Comment faire pour compter le nombre de sacs créés dans la fonction main ? (0.5 pts)
4. On se propose de généraliser la classe ‘Sac’ pour qu’elle puisse gérer n’importe quel
type d’éléments (pas seulement des ballons).
Expliquer et détailler comment en C++, il est possible de réaliser cette généralisation
(Ne donnez pas la déclaration ni l’implémentation de la classe générique). (1 pt)

3/3

Vous aimerez peut-être aussi