User Tools

Site Tools


in204:tds:sujets:td1:part4

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
in204:tds:sujets:td1:part4 [2019/09/23 13:23]
bmonsuez [Question n°1]
in204:tds:sujets:td1:part4 [2022/11/18 10:49] (current)
Line 198: Line 198:
  
 Ajouter à toutes ces classes des méthodes d’affichage pour le déboguage que l’on appellera ''​print''​. Ajouter à toutes ces classes des méthodes d’affichage pour le déboguage que l’on appellera ''​print''​.
 +
 +<hidden Correction>​
 +
 +<code cpp>
 +class Point
 +{
 +    // Ajouter la méthode suivante après les autres
 +    // méthodes.
 +public:
 +    void print() const
 +    {
 +        std::cout << "​("​ << m_x << ", " << m_y << "​)"; ​
 +    }
 +};
 +
 +class Segment
 +{
 +    // Ajouter la méthode suivante après les autres
 +    // méthodes.
 +public:
 +    void print() const
 +    {
 +        std::cout << "​[";​
 +        m_start.print();​
 +        std::cout << "​-";​
 +        m_end.print();​
 +        std::cout << "​]"; ​
 +    }
 +};
 +
 +class Droite
 +{
 +    // Ajouter la méthode suivante après les autres
 +    // méthodes.
 +public:
 +    void print() const
 +    {
 +        std::cout << "<";​
 +        m_point.print();​
 +        std::cout << ", " m_angle << ">"; ​
 +    }
 +};
 +
 +</​code>​
 +
 +</​hidden>​
 +
  
 ==== Question n° 3 ==== ==== Question n° 3 ====
Line 205: Line 252:
   * Ajouter une méthode move(int x, int y) effectuant une translation à une droite.   * Ajouter une méthode move(int x, int y) effectuant une translation à une droite.
  
-<hidden Correction class Droite>+ 
 +<hidden Correction
 + 
 +Cette version correspond à des méthodes qui crée un nouvel objet qui est une copie de l'​objet courant et ne modifie par l'​objet courant. 
 + 
 +<code cpp> 
 +... 
 + 
 +const double pi = 3.14; 
 + 
 +... 
 + 
 +class Droite 
 +
 +    // Code précédent de la classe. 
 +    ...      
 +     
 +public: 
 +    Droite rotate(double anAngle) const 
 +    { 
 +        return Droite(m_Point,​ m_angle + anAngle); 
 +    } 
 +    Droite rotate90(double anAngle) const 
 +    { 
 +        return rotate(m_Point,​ m_angle + 3.14/4); 
 +    } 
 +    Droite move(int x, int y) const 
 +    { 
 +        return Droite( 
 +            Point(m_Point.getX() + x, 
 +                  m_Point.GetY() + y), 
 +            m_angle); 
 +    } 
 +    ... 
 +}; 
 +</​code>​ 
 + 
 +Une autre possibilité consiste à modifier l'​objet courant. C'est ce que fait le code suivant : 
 + 
 +<code cpp> 
 +... 
 + 
 +const double pi = 3.14; 
 + 
 +... 
 + 
 +class Droite 
 +
 +    ... // Code précédent de la classe. 
 +     
 +     
 +public: 
 +    Droite& rotate(double anAngle) 
 +    { 
 +        m_angle += anAngle; 
 +        return *this; 
 +    } 
 +    Droite& rotate90(double anAngle) 
 +    { 
 +        return Turn(m_Point,​ m_angle + pi/4); 
 +    } 
 +    Droite& move(int x, int y) 
 +    { 
 +        mPoint = 
 +            Point(m_Point.getX() + x, 
 +                  m_Point.GetY() + y); 
 +        return *this; 
 +    } 
 +}; 
 +</​code>​ 
 + 
 +Typiquement,​ nous retournons une référence à l'​objet que nous venons de modifier. Ceci permet d'​enchaîner les transformations comme suit : 
 + 
 +<code cpp> 
 +    Droite droite(Point(0,​0),​ pi/8); 
 +     
 +    droite.Move(2,​3).rotate(-pi/​8);​ 
 +        // Nous effectuons une droite et puis nous effectuons  
 +        // une rotation. 
 +</code> 
 </​hidden>​ </​hidden>​
 +
 ==== Question n° 4 ==== ==== Question n° 4 ====
  
Line 228: Line 356:
 } }
 </​code>​ </​code>​
 +
 +<hidden correction>​
 +
 +Il suffit d'​exécuter le code pour les classes réalisées et vérifier que les résultas sont conformes aux résultats attendus.
 +
 +</​hidden>​
 +
  
  
in204/tds/sujets/td1/part4.1569245003.txt.gz · Last modified: 2019/09/23 13:23 by bmonsuez