Changes between Version 3 and Version 4 of 2011CaoTme1


Ignore:
Timestamp:
Feb 14, 2011, 6:22:45 PM (14 years ago)
Author:
jpc
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • 2011CaoTme1

    v3 v4  
    44= Objet Simples =
    55
    6 L'objectif de ce premier TME est de bien se familiariser avec les mécanismes base
    7 régissant le fonctionnement d'un objet C++. Plus particulièrement sur les
    8 constructeurs & destructeurs, et les contextes dans lesquels ils peuvent être
     6L'objectif de  ce premier TME est  de bien se familiariser  avec les mécanismes
     7base régissant le fonctionnement d'un objet C++. Plus particulièrement sur les
     8constructeurs & destructeurs,  et les contextes dans lesquels ils peuvent être
    99appelés.
    1010
    1111== Présentation du Code ==
    1212
    13 Comme il a été annoncé en cours un soin tout particulier devra être accordé à
    14 la présentation de votre code. A cet effet un exemple type d'indentation vous
     13Comme il a été  annoncé en cours un soin tout particulier devra être accordé à
     14la présentation de  votre code. A cet effet un exemple type d'indentation vous
    1515est fourni ci-après. Toujours pour une meilleure lisibilité, réduisez la taille
    16 des tabulations à 2 ou 4 caractères au lieu du defaut de 8. Enfin, n'insérez
    17 jamais le caractère ''tabulation'' dans votre code source, configurez votre
    18 éditeur favori pour que celui-çi substitue automatiquement des espaces blanc
     16des tabulations à  2 ou 4 caractères  au lieu du defaut de 8. Enfin, n'insérez
     17jamais  le caractère ''tabulation''  dans votre  code source, configurez votre
     18éditeur favori  pour que celui-çi  substitue automatiquement des espaces blanc
    1919ordinaires à la place d'une tabulation.
    2020
    21 Pour '''{{{vim}}}'''/'''{{{gvim}}}''', ajouter dans votre {{{~/.vimrc}}} les lignes
    22 suivantes:
     21Pour  '''{{{vim}}}'''/'''{{{gvim}}}''', ajouter  dans votre  {{{~/.vimrc}}} les
     22lignes suivantes:
    2323{{{
    2424:set shiftwidth=2
     
    6060== Compilation ==
    6161
    62 Dans le cadre de ce premier TME, nous allons nous contenter de faire de la compilation
    63 monolithique. C'est à dire que tout le code de chaque exercice sera contenu dans un
    64 seul fichier source, par exemple {{{Box.cpp}}}. L'éxécutable sera créé par compilation
    65 de cet unique fichier.
     62Dans le  cadre de ce  premier TME,  nous allons nous  contenter de faire  de la
     63compilation monolithique. C'est à dire que tout le code de chaque exercice sera
     64contenu dans  un seul fichier  source, par exemple  {{{Box.cpp}}}. L'éxécutable
     65sera créé par compilation de cet unique fichier.
    6666
    6767Compilation monolithique d'un fichier source:
     
    6969g++ -Wall -g -o box Box.cpp
    7070}}}
    71 Ici, l'éxécutable généré sera {{{box}}}. Attention l'argment {{{-o}}} doit immédiatement
    72 être suivi du nom de l'éxécutable ({{{box}}}).
     71
     72Ici,  l'éxécutable généré  sera  {{{box}}}. Attention  l'argment {{{-o}}}  doit
     73immédiatement être suivi du nom de l'éxécutable ({{{box}}}).
    7374
    7475Autres arguments donnés à {{{g++}}}:
    75 * {{{-g}}} demande d'inclure le code nécessaire pour pouvoir utiliser un débogueur
    76   ({{{gdb}}} ou {{{ddd}}}).
    77 * {{{-Wall}}} demande d'afficher tous les avertissements. Vous devrez toujours
    78   utiliser ce drapeau ({{{flag}}}) et à l'issue de la mise au point, votre programme
    79   ne devra générer aucun avertissement.
     76* {{{-g}}}  demande  d'inclure le  code  nécessaire  pour  pouvoir utiliser  un
     77  débogueur ({{{gdb}}} ou {{{ddd}}}).
     78* {{{-Wall}}} demande d'afficher tous  les avertissements. Vous devrez toujours
     79  utiliser ce  drapeau ({{{flag}}})  et à  l'issue de la  mise au  point, votre
     80  programme ne devra générer aucun avertissement.
    8081
    8182
     
    8384
    8485Nous allons implémenter la classe {{{Box}}} présentée en cours.
     86
     87'''Attention''', dans  le récapitulatif  suivant, les prototypes  des fonctions
     88membre ne sont  pas forcément donnés de façon exacte.  Votre travail consiste à
     89les achever conformément à ce qui a été vu en cours (et au bon sens).
     90
    8591La classe {{{Box}}} comporte les cinq attributs suivants:
    8692* {{{_name}}} : le petit nom de l'objet courant (de type {{{std::string}}}).
    87 * {{{_x1, _y1, _x2, y2}}} : les coordonnées des deux angles de la boite (de type {{{int}}}).
     93* {{{_x1, _y1,  _x2, y2}}} :  les coordonnées des  deux angles de la  boite (de
     94  type {{{int}}}).
     95
     96Constructeurs: (''CTOR'')
     97* {{{Box()}}}, constructeur par défaut. Doit construire une boîte vide.
     98* {{{Box(const std::string&, int  x1, int y1, int x2,  int y2)}}}, constructeur
     99  ''ordinaire''.
     100* {{{Box(const  Box&)}}},   constructeur  par  copie.  Pour   plus  de  clarté,
     101  lorsqu'une  boite sera  copiée on  s'autorisera  à en  modifier le  nom en  y
     102  ajoutant le suffixe {{{"_c"}}}.
     103
     104Destructeur: (''DTOR'')
     105* {{{~Box()}}}, destructeur (unique).
     106
     107Accesseurs: (''accessors'')
     108* {{{getName()}}}
     109* {{{getX1()}}}
     110* {{{getY1()}}}
     111* {{{getX2()}}}
     112* {{{getY2()}}}
     113* {{{isEmpty()}}}
     114* {{{intersection(const Box&)}}}
     115* {{{print(std::ostream&)}}} : affiche l'état de  la {{{Box}}} dans un flux, on
     116  choisi le format suivant: {{{<"NAME" x1 y1 x2 y2>}}}.
     117
     118Modificateurs: (''mutators'')
     119* {{{makeEmpty()}}}
     120* {{{inflate(int dxy)}}}
     121* {{{inflate(int dx, int dy)}}}
     122* {{{inflate(int dx1, int dy1, int dx2, int dy2)}}}
     123* {{{getIntersection(const Box&)}}}
     124
     125Afin de pouvoir bien suivre  les appels aux constructeurs & destructeurs durant
     126l'éxécution du programme, nous allons  ajouter des affichages dans les corps de
     127ces fonctions.  Ils devront afficher: (huit espaces blancs en début de ligne)
     128
     129{{{
     130        Box::Box() <"NAME" x1 y1 x2 y2>
     131        Box::Box(const std::string&, ...) <"NAME" x1 y1 x2 y2>
     132        Box::Box(const Box&) <"NAME" x1 y1 x2 y2>
     133        Box::~Box() <"NAME" x1 y1 x2 y2>
     134}}}
    88135
    89136
     137Programme de test à utiliser pour valider votre classe:
    90138[[Image(BoxMain.png,75%,align=center)]]