la classe R3

Le but de ce premier TP est d’implémenter la classe R3 dans un fichier point.hpp, qui permettra par exemple de manipuler les coordonnées des points de l’espace d’un maillage tridimensionnel. La donnée de la classe est donc un vecteur de taille 3 à coefficients réels (type double du C++).

On rappelle la nomenclature d’une classe :

class R3 {
  private:
  // les donnees de la classe
  public:
  // Les constructeurs et methodes de la classe
  int ma_methode() {
    std::cout << "ma methode" << std::endl;
    return 42;
  }
};
Même s’il est tentant d’utiliser un conteneur comme la classe vector de la STL (librairie standard du C++) pour stocker les coordonnées des points (et vous êtes fortement encouragés à utiliser les conteneurs de la STL pour les prochaines classes que vous écrirez), nous allons essayer ici de nous en passer. Vous pouvez par exemple stocker les coordonnées avec un double*, en allouant/désallouant dynamiquement la mémoire avec new/delete.

La classe R3 devra implémenter au moins les méthodes publiques suivantes :

  • Les constructeurs :
R3(); // cree le point (0,0,0)
R3(const double& x, const double& y, const double& z); // cree le point de coordonnees (x,y,z)
R3(R3 const& p); // constructeur par recopie
  • L’opérateur d’affectation :
R3& operator=(const R3& p);
  • Le destructeur :
~R3();
  • Les accesseurs :
double operator[](int i) const; // acces a la valeur de la coordonnee i (par copie)
double& operator[](int i); // acces a la reference de la coordonnee i
  • Opérations arithmétiques :
R3 operator+(const R3& p) const; // addition des coordonnees de deux points
R3 operator-(const R3& p) const; // soustraction des coordonnees de deux points

Certaines opérations devront être définies à l’extérieur de la classe :

R3 operator*(const double& a, const R3& p); // multiplication par un scalaire
ostream& operator<<(ostream& o, const R3& p); // affichage des coordonnées du point

Vous validerez la classe en écrivant un fichier test_point.cpp contenant une fonction main qui testera toutes ses fonctionnalités :

#include <iostream>
#include "point.hpp"

int main() {
  R3 p(1.,2.,3.);
  R3 q = 5*p;
  std::cout << q[1] << std::endl;
  [...]

  return 0;
}
Previous
Next