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;
}