Bonjour à tous,
J'ai fait une classe matrice et j'ai surchargé l'opérateur * afin de multiplier 2 matrices, le voilà :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 matrice matrice::operator*(const matrice &m1) { matrice result(ligne,m1.colonne); if(colonne == m1.ligne) // si nb colonnes = nb lignes de l'autre matrice { for(int i=0;i<ligne;i++) //pour chaque ligne { for(int j=0;j<m1.colonne;j++) // pour chaque colonne { for(int k=0;k<colonne;k++) // produit scalaire result.mat[i][j] += mat[i][k]*m1.mat[k][j]; } } } else { cout<<"Matrices incompatibles,operation impossible !"<<endl; } return result; }
J'ai également surchargé l'opérateur << d'affichage qui marche très bien (je l'ai testé), mais quand je fais :
Rien ne s'affiche. J'ai essayé plusieurs choses, mais je n'arrive pas à comprendre pourquoi cela ne veut pas marcher !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 cout<<"m1 * m2 = "<<(m1*m2)<< endl; cout<<endl;*/
J'ai fait une surcharge de l'opérateur = :
et mon constructeur initialise à 0 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 matrice &matrice::operator=(matrice &m1) // Affectation d'une matrice à une autre { int i,j; if(&m1 != this) { for(i=0;i<ligne;i++) { for(j=0;j<colonne;j++) { mat[i][j] = m1.mat[i][j]; } } } else { cout << "(matrice) Erreur d\'affectation !" << endl; } return *this; }
mais ce qui est bizare c'est que quand je fais un affichage dans ma fonction * juste avant le return, ça me met bien la matrice attendue.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 matrice::matrice(int lig, int col) // constructeur { for (int i=0;i<lig;i++) { for (int j=0;j<col;j++) { mat[i][j]=0; } } ligne = lig; colonne = col; }
Merci d'avance pour votre aide.
Ajout des balises [code] par khayyam90
Partager