Corrigé du TD 4 : opérateurs, conception objet

Opérateurs pour la classe ''Vecteur''

Fichier ''Vecteur.h''

#ifndef Vecteur_h
#define Vecteur_h
 
#include <iostream>
#include <vector>
 
class Vecteur
{
public :
    Vecteur(int dimensions);
    int taille() const;
 
    float operator[](int i) const;
    float & operator[](int i);
 
    Vecteur const & operator+=(Vecteur const & autre);
    Vecteur const & operator*=(int scalaire);
private :
    std::vector<float> coordonnees;
};
 
Vecteur operator+(Vecteur const & v1, Vecteur const & v2);
Vecteur operator*(Vecteur const & v1, int scalaire);
Vecteur operator*(int scalaire, Vecteur const & v1);
 
bool operator==(Vecteur const & v1, Vecteur const & v2);
bool operator!=(Vecteur const & v1, Vecteur const & v2);
 
std::ostream & operator<<(std::ostream & stream, Vecteur const & v);

Fichier ''Vecteur.cpp''

#include "Vecteur.h"
 
Vecteur(int dimensions)
: coordonnees(dimensions)
{
}
 
int Vecteur::taille() const
{
    return coordonnees.size();
}
 
float Vecteur::operator[](int i) const
{
    return coordonnees[i];
}
 
float & Vecteur::operator[](int i);
{
    return coordonnees[i];
}
 
Vecteur const & Vecteur::operator+=(Vecteur const & autre)
{
    for(int i=0; i<this->taille(); ++i)
    {
        coordonnees[i] += autre.coordonnees[i];
    }
    return *this;
}
 
Vecteur const & Vecteur::operator*=(int scalaire)
{
    for(int i=0; i<this->taille(); ++i)
    {
        coordonnees[i] *= scalaire;
    }
    return *this;
}
 
Vecteur operator+(Vecteur const & v1, Vecteur const & v2)
{
    Vecteur v = v1;
    v+=v2;
    return v;
}
 
Vecteur operator*(Vecteur const & v1, int scalaire)
{
    Vecteur v = v1;
    v *= scalaire;
    return v;
}
 
Vecteur operator*(int scalaire, Vecteur const & v1)
{
    return (v1*scalaire);
}
 
bool operator==(Vecteur const & v1, Vecteur const & v2)
{
    bool egalite=true;
    for(int i=0; i<this->taille() && egalite; ++i)
    {
        egalite = (v1.coordonnees[i] == v2.coordonnees[i]);
    }
    return egalite;
}
 
bool operator!=(Vecteur const & v1, Vecteur const & v2)
{
    return !(v1==v2);
}
 
std::ostream & operator<<(std::ostream & stream, Vecteur const & v)
{
    stream << "(";
    for(int i=0; i<v.taille(); ++i)
    {
        stream << v[i];
        if(i+1<v.taille()) stream << ", ";
    }
    stream << ")";
    return stream;
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>