Bonjour,
Voici ma classe Dvector.h :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| /**
* @class Dvector
*
* @brief Représentation d'un vecteur de réels, de dimension quelconque
*
*/
class Dvector {
private:
int dim;
double * v;
public:
/**
* @brief Constructeur par défaut
*
* Construit un vecteur de dimension nulle
*/
Dvector();
/**
* @brief Constructeur paramétré
*
* @param size dimension du vecteur
* @param init optionnel : valeur d'initialisation (par défaut 0)
*
* Construit un vecteur de dimension dim, et initialise ses composantes à init
*/
Dvector(int size, double init = 0);
/**
* @brief Constructeur par copie
* @param Vect le vecteur source
* Construit un nouveau vecteur par recopie de Vect
*
*/
Dvector(const Dvector & Vect);
/**
* @brief Constructeur à partir d'un fichier
*
* @param filename nom du fichier d'entree
*
* Construit un vecteur à partir du fichier d'entree
*/
Dvector(const char * filename);
/**
* @brief Destructeur
*/
~Dvector();
/**
* @brief Redéfinition de l'opérateur (), accès à une composante
* @param i indice de la composante (de O a size() - 1)
* @return la i-ème composante du vecteur (indices débutanst à 0)
*/
double & operator()(int i);
Dvector & operator+= (const Dvector & vect);
/**
* @brief Accesseur
*
* @return tableau des composantes
*
* Accède au tableau des composantes
*/
double * getV();
/**
* @brief Accesseur
*
* @return dimension du vecteur
*
* Accède à la dimension du vecteur
*/
int size();
/**
* @brief fonction d'affichage
*
* Affiche le vecteur
**/
void print();
}; |
J'ai déjà surcharger l'opérateur ( ) pour accéder à une composante du vecteur.
Je cherche à surcharger l'opérateur += dont voici mon implémentation ;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| /* Surcharge d'opérateurs */
double & Dvector::operator()(int i){
return v[i];
}
Dvector & Dvector::operator+= (const Dvector & vect) {
assert(dim == vect.dim);
Dvector & V = *this;
for (int i = 0; i < dim ; i++) {
V(i) += vect.v[i];
}
return V ;
} |
Quand je teste dans un main cela fonctionne mais déjà je ne comprends pas pourquoi ça compile puisque les attributs sont privés donc on est pas censé pouvoir accéder aux attributs de Vect ?
Autre curiosité, si j'écris vect(i) à la place de vect.v[i] là ça ne compile plus :
error: passing const Dvector as this argument of double& Dvector::operator()(int) discards qualifiers
Merci de vos conseils.
Partager