Série 3 :
Constructeurs / Destructeurs.

Buts

Cette série a pour but de vous faire faire pratiquer les notions de constructeurs/destructeurs.
Nous continuons par ailleurs à développer le projet.
 

Préliminaires :

Avant de commencer les exercices décrits dans cette série, créez le répertoire ~/Desktop/myfiles/cpp/serie16 et travaillez dans ce répertoire.

IMPORTANT ! Concernant le projet, inscrivez officiellement par binômes ici avant la fin de la semaine prochaine.


Exercice 0 : reprise de l'exemple du cours (Constructeurs/Destructeurs, niveau 0)

Le but de cet exercice est de reprendre l'exemple du cours illustrant les différents constructeurs en utilisant comme support une classe Peluche.

Cliquez ici si vous souhaitez faire cet exercice.


Exercice 1 : apéritif (niveau 1)

Cet exercice correspond à l'exercice n°49 (pages 119 et 301) de l'ouvrage C++ par la pratique (3e édition, PPUR).
Exercice n°5 du MOOC

Définir la classe Apero de sorte que le main() suivant :

int main() {
  Apero bic;
  cout << "Super !" << endl;
  bic.bis();
  cout << "Non merci." << endl;
  return 0;
}

affiche le texte suivant :

L'heure de l'apéro a sonné !
Super !
Encore une ?
Non merci.
À table !

Exercice 2 : un peu de douceur dans ce monde (niveau 1)

Cet exercice correspond à l'exercice n°50 (pages 119 et 301) de l'ouvrage C++ par la pratique (3e édition, PPUR).
Exercice n°6 du MOOC

Dans un fichier poeme.cc définissez la classe Fleur de sorte que le programme principal suivant :

int main ()
{
  Fleur f1("Violette", "bleu");
  Fleur f2(f1);
  cout << "dans un cristal ";
  f2.eclore();
  cout << "Donne un poème un peu fleur bleue" << endl
       << "ne laissant plus ";
  return 0;
}

affiche le texte suivant (inspiré d'un poème arabe du 5e siècle de l'hégire) :

Violette fraichement cueillie
Fragile corolle taillée
dans un cristal veine de bleu
Donne un poème un peu fleur bleue
ne laissant plus qu'un simple souffle...
qu'un simple souffle...

Remarque : la solution n'est pas forcément unique.


Exercice 3 : banque (niveau 3)

Exercice n°7 du MOOC

Le (très mauvais) programme banque1.cc  dont le code est fourni ici, contient un programme bancaire qui est modularisé sous forme de fonctions. Transformez-le en programme orienté objet sous le nom de banque2.cc en suivant les étapes suivantes :

  • Étudiez le fonctionnement du programme. La banque a 2 clients. Chaque client a un compte privé et un compte d'épargne avec des soldes différents. Le taux d'intérêt d'un compte d'épargne est plus élevé que celui d'un compte privé. Les données de chaque client (nom, ville et soldes) sont affichées avant et après le bouclement des comptes.
  • Réfléchissez aux objets que vous aimeriez utiliser dans votre programme et ajoutez les classes correspondantes. Il peut s'agir d'objets de toute nature (client, maison, billet, compte, relation bancaire etc.). N'oubliez pas que la modularisation n'est pas une science exacte. Chaque programmeur décide des classes qu'il trouve utiles et qui lui semblent correspondre au meilleur modèle de la réalité. C'est souvent l'étape la plus difficile d'un projet de programmation.
  • Transférez le code concernant les objets dans les classes. Utilisez le mot-clé private pour encapsuler les attributs et les méthodes qui ne seront pas utilisées à l'extérieur de la classe. Chaque méthode devrait être courte et sans trop d'instructions détaillées. Les identificateurs (noms des variables, attributs et méthodes) devraient être signifiants.

Exemple d'exécution du programme:

Données avant le bouclement des comptes :
Client Pedro de Genève
   Compte courant : 1000 francs
   Compte épargne : 2000 francs
Client Alexandra de Lausanne
   Compte courant : 3000 francs
   Compte épargne : 4000 francs
Données apres le bouclement des comptes :
Client Pedro de Genève
   Compte courant : 1010 francs
   Compte épargne : 2040 francs
Client Alexandra de Lausanne
   Compte courant : 3030 francs
   Compte épargne : 4080 francs

Banque avec des clientes (Niveau 1)

Vous avez certainement remarqué que l'affichage du programme précédent ne fait pas de différence entre les clients et les clientes.

Ceci est facile à corriger dans la version orientée objets du programme, par exemple en ajoutant une variable d'instance booléenne masculin à la classe Client (si vous en avez une) et en testant sa valeur dans la méthode d'affichage.

Modifiez votre programme pour qu'il affiche «Cliente» au lieu de «Client». Par exemple :

Données avant le bouclement des comptes :
Client Pedro de Genève
   Compte courant : 1000 francs
   Compte épargne : 2000 francs
Cliente Alexandra de Lausanne
   Compte courant : 3000 francs
   Compte épargne : 4000 francs
Données apres le bouclement des comptes :
Client Pedro de Genève
   Compte courant : 1010 francs
   Compte épargne : 2040 francs
Cliente Alexandra de Lausanne
   Compte courant : 3030 francs
   Compte épargne : 4080 francs

Exercice 4 : supermarché (niveau 2)

Exercice n°8 du MOOC

Un supermarché souhaite que vous l’aidiez à afficher le total des achats enregistrés par ses caisses. Il s’agit de compléter le programme supermarche.cc fourni.

Voici les entités nécessaires pour modéliser le fonctionnement du supermarché :

  • les articles vendus : caractérisés par leur nom (une chaîne de caractères), leur prix unitaire (un double) et un booléen indiquant si l’article est en solde ou pas (en Suisse, on dit «en action») ;
  • les achats : un achat est caractérisé par l’article acheté et la quantité achetée de cet article ;
  • les caddies : caractérisés par l’ensemble des achats qu’ils contiennent ;
  • les caisses : chargées de scanner et enregistrer le contenu des caddies ; une caisse est caractérisée par un numéro de caisse (un entier) et le montant total des achats qu’elle a scanné (un double).


Le programme principal fourni a pour but de faire afficher le montant total de chaque caisse au bout d’une journée donnée. Commencer par l’étudier.

Coder ensuite les structures de données et les méthodes manquantes. Ces entités doivent pouvoir être testées avec le programme principal fourni.

Dans ce fichier, déclarer les classes nécessaires à la modélisation du supermarché, telles que suggérées ci-dessus.

Il est suggéré d'utiliser un vector d'achats pour modéliser le contenu du caddie.

Faire bien attention à l'encapsulation (e.g. les attributs doivent être privées).

Les méthodes à implémenter dans la classe concernant les achats sont :

  • afficher() affichant les caractéristiques de l'article (son nom, son prix unitaire, la quantité achetée et le prix de l’achat). De plus, si l’article concerné est en solde, il faudra afficher le texte «(en action)».

    Voici le modèle d’affichage pour afficher() :

    Petit-lait : 2.5 x 6 = 7.5 Frs (en action)

    Petit-lait est le nom de l’article, 2.5 son prix unitaire, 6 la quantité achetée, 7.5 le prix de l’achat et «(en action)» l'indication que l’article est en solde. Cette indication ne doit évidemment apparaitre que si l’article est en solde.

  • toute autre méthode vous semblant nécessaire.

Pour les caddies :

  • remplir(..) conforme au programme principal fourni.
    Réfléchissez à comment stocker le contenu du caddie (qui sera scanné par la suite).
  • toute autre méthode vous semblant nécessaire.

Pour les caisses :

  • afficher() qui affiche son numéro et la valeur de son champ montant total selon la forme de l’exemple suivant :
        La caisse 1 a encaisse 121.15 Frs aujourd'hui.
    où 1 est le numéro de la caisse et 121.15 le montant total. Vous supposerez que ce montant total est stocké comme attribut (et qu'il est mis à jour par la méthode scanner(..), ci-dessous).
  • scanner(...) : cette méthode, qui doit être conforme au programme principal fourni, permet à la caisse d’afficher le ticket de caisse correspondant au contenu du caddie. Cette méthode doit aussi mettre à jour le montant total de la caisse en y ajoutant le montant des achats du caddie.

    L’affichage tu ticket de caisse doit se faire selon le modèle ci-dessous et doit utiliser la méthode afficher précédemment codée.

Exemple de déroulement

Une fois le programme complété, l'exécution du programme principal devrait ressembler à ceci :

Chou-fleur extra : 3.5 x 2 = 7 F
C++ en trois jours : 48.5 x 1 = 48.5 F
Cookies de grand-mere : 3.2 x 4 = 12.8 F
Petit-lait : 2.5 x 6 = 7.5 F (en action)
Sardines : 6.5 x 2 = 13 F
-----
Total à payer : 88.8 F.
=========================================
Les malheurs de Sophie : 16.5 x 1 = 8.25 F (en action)
Cremeux 100%MG : 5.8 x 1 = 5.8 F
Pois surgeles : 4.35 x 2 = 8.7 F
Poires Williams : 4.8 x 2 = 9.6 F
-----
Total à payer : 32.35 F.
=========================================
100% Arabica : 6.9 x 2 = 6.9 F (en action)
Pain d'epautre : 6.9 x 1 = 6.9 F
Cremeux 100%MG : 5.8 x 2 = 11.6 F
-----
Total à payer : 25.4 F.
=========================================
Résultats du jour :
Caisse 1 : 121.15 F
Caisse 2 : 25.4 F

Projet : continuation et INSCRIPTIONS

Pour faire la partie concernant le projet, voir ici.


Dernière mise à jour le 10 mars 2014
Last modified: Mon Mar 10, 2014