Vous êtes sur la page 1sur 2

Département d’Informatique 2022-2023

Faculté des Sciences, Université Ibn Zohr Session normale


Agadir

Examen de POO (C++), SMI5 et II5 -Durée : 1h30. Aucun document autorisé

Important : Il faut respecter exactement les noms des variables et des fonctions.

Questions de cours (3 pts)


1/ Si une classe B dérive d’une classe A, qu’ils sont les variables et méthodes dont elle va hériter ?
2/ Quelle est la différence entre un pointeur et une référence en C++ ?
3/ Quelle est la différence entre polymorphisme statique et polymorphisme dynamique ?

Exercice 1 (13 pts)


NB. Vous pouvez répondre directement aux questions ci-dessous ou bien les regrouper sous forme de deux
fichiers .h et .cpp

Ecrire un programme qui permet de :


1/ Créer une classe de base nommée Vehicule. Un Vehicule possède trois membres protégés :
 annee_achat de type int ;
 prix_achat et prix_courant de type double ;
Et les méthodes publiques :
 affiche() permet d’afficher les trois membres : annee_achat, prix_achat et prix_courant ;
 calculePrix() permet de calculer le membre prix_courant d’un Vehicule à l’aide de la formule
suivante : prix_courant = (1 - (2022 - annee_achat)*0.01)*prix_achat ;
 Vehicule (int annee, double prix) qui joue le rôle du constructeur de la classe en question.
2/ Réaliser ensuite une classe nommée Camion dérivée publiquement de la classe Vehicule.
Cette classe fille comprend le membre protégé :
 volume de type int
Et les méthodes publiques :
 affiche() afin que l’affichage donne également le membre volume ;
 calculePrix() permet de calculer le membre prix_courant d’un Camion à l’aide de la formule
suivante : prix_courant = (1 - (0.1*volume/1000))*prix_achat ;
 Camion (int annee, double prix, int vol) qui joue le rôle du constructeur de la classe en question.

3/ De plus, définir une classe nommée Voiture dérivée publiquement de la classe mère Vehicule.
Cette sous classe de sa part contient trois membres protégés :
 nombre_portes de type int ;
 puissance et kilometrage de type double
Elle va également redéfinir les méthodes suivantes :
 affiche() afin que l’affichage donne également les trois membre nombre_portes, puissance et
kilometrage ;
 calculePrix() permet de calculer le membre prix_courant d’une Voiture à l’aide de la formule
suivante : prix_courant = (1 - ((2022 - annee_achat)*0.02 +0.05*kilometrage/10000))*prix_achat ;
 Voiture (int annee, double prix, int portes, double cv, double km) qui joue le rôle du constructeur
de la classe en question.
4/ 4.1/ Ecrire le programme principal qui permet d’appeler
 Un objet de type Vehicule
 Deux objets de type Voiture
 Trois objets de type Camion
1/2
Pour chaque objet, le programme principal va appliquer les méthodes affiche() et calculePrix().
4.2/ Stocker les voitures et les camions dans un vecteur vect.

Maintenant, on suppose que nos véhicules peuvent être marqués par deux types d’habillage (Deco1 et Deco2)
5/ Ajouter les classes nécessaires en passant par une classe abstraite pure (DecoratorAbstrait).
NB. Un habillage doit être utilisé (void utiliser()).

6/ Réécrire la classe Vehicule en ajoutant uniquement les modifications apportées.

7/ Dans le programme principal, créer un objet de type Vehicule * qui reçoit un objet de type Voiture et lui
appliquer un habillage de votre choix.

Exercice 2 (4 pts)
1/ Déclarer une classe Triple avec trois membre privés (double) x, y et z. Définir, un seul constructeur qui
initialise les membres par des valeurs spécifiées par l’utilisateur ou, par défaut, toutes égales à 0. Puis,
surcharger les opérateurs suivants :

— + addition de deux objets Triple


— ++ (Post-incrémentation) qui incrémente x et z par 1 chacun.
2/ Ecrire la macro-fonction qui calcule l'expression x + x. Puis la fonction inline qui fait de même.
Montrer et expliquer sur un exemple que l'appel n'est pas réalisé correctement avec la macro-fonction alors
qu'il l’est avec la fonction inline.

Bon courage

2/2

Vous aimerez peut-être aussi