T2.poo : Sujet du TP3 T2.poo : Sujet du TP3
Groupe ESIEE, Denis BUREAU, décembre 2001.
Attention ! Le sujet peut être modifié jusqu'à la veille du TD.

I.  Les objectifs

II.  Notions abordées dans le cours 3

III.  Références dans les documents

Le début du polycopié "L'héritage et la généricité en C++" et le corrigé du TP2.

IV.  Conseils généraux

Appelez un intervenant dès que quelquechose ne semble pas clair dans le sujet ou si, après avoir réfléchi, vous ne trouvez pas la solution.

Utilisez si possible les noms de variables et de fonctions donnés dans les sujets pour rester compatible avec les solutions partielles qui vous seront données.

Créez deux fichiers pour chaque classe, et "déclarez" dans le .H et "définissez" dans le .CPP.

Empêchez systématiquement les éventuelles inclusions multiples, déclarez les fonctions 'public', et déclarez les données 'private' et les fonctions 'const' à chaque fois que c'est possible.

Utilisez les fonctions qui accèdent aux données à chaque fois que c'est possible, plutôt que d'accéder aux données directement.

Créez sur C: un répertoire TP3 et des sous-répertoires pour chaque exercice. N'oubliez pas de recopier tous les fichiers sources sur votre compte à la fin du TP.

V.  Exercice 1 (sans rapport avec le distributeur)

  1. Créer un nouveau projet TESTPOIN.
  2. Créer un nouveau projet TESTPCOL et y recopier la classe Point.
  3. Créer un nouveau projet TESTPCDI et y recopier les classes Point et Pointcol.

VI.  Exercice 2 (Distributeur)

On désire maintenant améliorer le fonctionnement du monnayeur pour qu'il gère un stock de pièces. Ainsi, il ne pourra rendre indéfiniment la monnaie, ce qui est plus proche de la réalité.

Pour ne pas avoir à refaire la gestion d'un stock, il faut rendre la classe Stock indépendante de Produit, créer une classe Piece, puis utiliser la classe Stock dans le monnayeur pour gérer un stock de pièces et dans le distributeur pour gérer un stock de produits.

  1. Récupérer les fichiers ELEM.H, PIECE.H et PIECE.CPP, et les comprendre.
  2. Modifier PRODUIT.H pour le faire hériter de la classe elem (aucune modification à l'intérieur de la classe n'est nécessaire).
  3. Modifier STOCK.H pour le rendre indépendant de Produit : inclure ELEM.H pour remplacer la définition d' elem (aucune modification à l'intérieur de la classe n'est nécessaire).
  4. Créer une classe Stock_produits qui prendra la place de l'ancienne classe Stock dans le distributeur. Cette classe hérite, bien entendu, de Stock et est vide pour le moment, si ce n'est l'inclusion souhaitable de la classe Produit.
  5. Créer une classe Stock_pieces qui servira au monnayeur. Cette classe hérite, bien entendu, de Stock et est, pour l'instant, vide, si ce n'est l'inclusion souhaitable de la classe Piece.
  6. Adapter le distributeur pour qu'il utilise Stock_produits. Adapter le monnayeur pour qu'il utilise Stock_pieces (notamment, changer le comportement de rendre_monnaie(), n'accepter que la somme exacte quand le stock de pieces est_limite(), et prévoir des limites dégressives suivant la valeur de la pièce.
  7. Tout retester, puis tout sauvegarder.















VII.  TESTPOIN.CPP

// TESTPOIN.CPP
//
#include <iostream.h>
#include "point.h"

int main()
  {
  Point  p1( -1, -3 ),          p2( 2, 4 );
         p1.affiche();          p2.affiche();
         p2.deplace( -5, 5 );   p2.affiche();
  return 0;
  }
/*
DEVRAIT AFFICHER : (-1,-3) (2,4) (-3,9)
*/
 

VIII.  TESTPCOL.CPP

// TESTPCOL.CPP
//
#include <iostream.h>
#include "pointcol.h"

int main()
  {
  Pointcol  pc1( 1, 1, 'R' ),       pc2( 2, 2 );
            pc1.affiche();          pc2.affiche();
            pc2.colore( 'G' );      pc2.affiche();
            pc2.deplace( -5, 5 );   pc2.affiche();
  return 0;
  }
/*
DEVRAIT AFFICHER : R:(1,1) W:(2,2) G:(2,2) G:(-3,7)
*/
 

IX.  TESTPCDI.CPP

// TESTPCDI.CPP
//
#include <iostream.h>
#include "pointcol.h"
#include "pcoldiag.h"

int main()
  {
  Pointcol pc1( 7, 8, 'C' );     Pcoldiag pcd2( -5 );
           pc1.affiche();                 pcd2.affiche();
           pc1.colore( 'G' );             pcd2.colore( 'G' );
           pc1.affiche();                 pcd2.affiche();
                                          pcd2.deplace( -5, 5 );
                                          pcd2.affiche();
  return 0;
  }
/*
DEVRAIT AFFICHER :
  C:(7,8) D:(-5,-5) G:(7,8) D:(-5,-5) D:(-10,0)
*/
 

X.  ELEM.H















// ELEM.H
// Classe vide dont on peut he'riter

#ifndef _ELEM_H
#define _ELEM_H
class elem {};
#endif
 














XI.  PIECE.H















// piece.h
// De'claration de la classe Piece

#ifndef _piece_h // Pre'vention des inclusions multiples
#define _piece_h
#include "ELEM.H"

class Piece : public elem
{
public:
// Constructeur / Destructeur
	Piece( float Valeur );
	~Piece() { }
// Accesseurs
	float AccesValeur() const;

// Donne'es membres
private :
	float valeur;
};
#endif
 














XII.  PIECE.CPP















// piece.cpp
// De'finition des fonctions membres de la classe Piece
#include "piece.h"

// Constructeur
Piece::Piece( float V )
  {
  valeur = V;
  }

// Accesseur
float Piece::AccesValeur() const
  {
  return valeur;
  }
 



File translated from TEX by TTH, version 2.75.
On 3 Dec 2001, 19:23.