Advertisement
anthonimes

L3 --- TP4 --- POO

Dec 4th, 2020 (edited)
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.30 KB | None | 0 0
  1. # include <stdlib.h>
  2. # include <assert.h>
  3. # include "vector.hpp"
  4.  
  5. using namespace std ;
  6.  
  7. Vector::Vector() {
  8.     this->size = 0;
  9.     this->element = NULL;
  10. }
  11.  
  12. Vector::Vector(unsigned int const _size) {
  13.     (*this).size = _size;
  14.     element = new float[(*this).size]();
  15.     /* () Permet d'initialiser les valeurs à 0 ; équivalent à :
  16.     for(unsigned int i = 0 ; i < (*this).size; ++i)
  17.       this->element[i] = 0;*/
  18. }
  19.  
  20. /* Constructeur par recopie */
  21. Vector::Vector(const Vector &v) {
  22.     this->size = v.size;
  23.     this->element = new float[this->size];
  24.     for(unsigned int i = 0; i < v.size; ++i)
  25.         this->element[i] = v[i];
  26. }
  27.  
  28. Vector::~Vector() {
  29.     // Marche -normalement- si element == NULL
  30.     delete[] element;
  31. }
  32.  
  33. void Vector::init_alea() {
  34.     for (unsigned int i = 0 ; i < size ; i++) {
  35.         element[ i ] = drand48 () ;
  36.     }                  
  37. }
  38.  
  39. /* Référence sur l'élément à la position i */
  40. float & Vector::operator[] (unsigned int const i) {
  41.     assert(i < size);
  42.     return element[i];
  43. }
  44.  
  45. float const & Vector::operator[] (unsigned int const i) const {
  46.     assert(i < size);
  47.     return element[i];
  48. }
  49.  
  50. Vector & Vector::operator= (Vector const & v) {
  51.     std::cout << "Operateur =" << std::endl;
  52.     /* Réallocation mémoire nécessaire si nombre d'éléments différent */
  53.     if(this->size != v.size) {
  54.         delete [] element;
  55.         (*this).size = v.size;
  56.         (*this).element = new float[v.size];
  57.     }
  58.     for(unsigned int i = 0; i < v.size; ++i)
  59.         (*this).element[i] = v[i];
  60.     return (* this) ;
  61. }
  62.  
  63. Vector Vector::operator+ (Vector const & v) const {
  64.     std::cout << "Operateur +" << std::endl;
  65.     Vector somme(v.size);
  66.     for(unsigned int i = 0; i < v.size; ++i)
  67.         somme.element[i] = v[i] + (*this).element[i];
  68.     return somme;
  69. }
  70.  
  71. Vector Vector::operator- (Vector const & v) const {
  72.     std::cout << "Operateur -" << std::endl;
  73.     Vector soustraction(v.size);
  74.     for(unsigned int i = 0; i < v.size; ++i)
  75.         soustraction.element[i] = v[i] - (*this).element[i];
  76.     return soustraction;
  77. }
  78.  
  79. Vector Vector::operator* (float const a) const {
  80.     // Appel au constructeur par recopie
  81.     Vector produit((*this));
  82.     for(unsigned int i = 0; i < size; i++)
  83.         produit.element[i] *= a;
  84.     return produit ;
  85. }
  86.  
  87. float Vector::operator| (Vector const & v) const {
  88.     float sum = 0 ;
  89.     for (unsigned int i = 0 ; i < size ; i ++) {
  90.         // (*this)[i] valable grâce à la surcharge d'opérateur
  91.         sum += (*this)[i] * v[i] ;
  92.     }
  93.     return sum ;
  94. }
  95.  
  96. bool Vector::operator== (Vector const & v) const {
  97.     for (unsigned int i = 0 ; i < size ; i ++) {
  98.         if ((*this)[i] != v[i]) {
  99.             return false ;
  100.         }
  101.     }
  102.     return true ;
  103. }
  104.  
  105. /* Méthodes non-membres de la classe Vector */
  106. Vector operator* (float const a, Vector const & v) {
  107.     // return v.operator*(a);
  108.     return v*a;
  109. }
  110.  
  111. /* Méthode amie */
  112. std::ostream & operator<< (std::ostream& ost, Vector const & v) {
  113.     ost.precision(10);
  114.     ost << "(";
  115.     /* size est accessible car méthode amie/friend */
  116.     for(unsigned int i = 0; i < v.size-1; ++i)
  117.         ost << v[i] << ", ";
  118.     /* Gestion particulière pour le dernier élément */
  119.     ost << v[v.size-1] << ")" << std::endl;
  120.     return ost ;
  121. }
  122.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement