J'ai recontrer un problème complètement fou à mes yeux en voulant creer un classe matrice, qui effectue des calcul de base sur les matrice.
voilà le code complet :
//---------------------------------------------------------------------------------
// matrice.h
//---------------------------------------------------------------------------------
class matrice{
int *tab; // pointeur sur le tableau représentant la matrice
int L; // dimensions effective de la matrice
int C;
char *NOM;
public:
// definition d'une matrice "vide": L=C=0
matrice(char *nom);
~matrice();
void init(int lignes, int colonnes);
friend ostream& operator<<(ostream& o, matrice M);
};
//---------------------------------------------------------------------------------
// matrice.cpp
//---------------------------------------------------------------------------------
#include <iostream>
using namespace std;
#include "matrice.h"
matrice::matrice(char *nom)
{
L=0;
C=0;
tab=((int *)0);
NOM=nom;
}
matrice::~matrice()
{
if(tab!=((int *)0)) delete[] tab;
}
void matrice::init(int lignes, int colonnes)
{
int i=0;
if(lignes<=0 || colonnes<=0){
L=0; C=0; // matrice "vide"
}
else if(tab!=((int *)0)){ // première initialisation
C=colonnes;
L=lignes;
tab = new int[L*C];
}
else{ // réinitialisation ultérieur avc d'autre dimensions
delete[] tab;
L=lignes;
C=colonnes;
tab= new int [L*C];
}
for(i=0; i<L*C; i++) tab[i]=1; // on créé une matrice avc que d 1
}
ostream& operator<<(ostream& o, matrice M)
{
int i,j;
o<<endl<<M.NOM<<"=";
for(i=1; i<=M.L; i++){
o<<"\t";
for(j=1; j<=M.C; j++)
o<<M.tab[(i-1)*M.C+j-1]<<"\t";
o<<endl;
}
o<<endl;
return o;
}
//---------------------------------------------------------------------------------
// main.cpp
//---------------------------------------------------------------------------------
#include <cstdlib>
#include <iostream>
using namespace std;
#include "matrice.h"
int main()
{
int lignes,colonnes;
matrice M = matrice("M");
M.init(3,3);
cout<<M;
cout<<M;
cout<<M;
M.~matrice();
system("PAUSE");
return EXIT_SUCCESS;
}
//---------------------------------------------------------------------------------
// Après avoir compilé, j'obtient ça comme résultat :
//---------------------------------------------------------------------------------
M= 1 1 1 // première affichage ok !
1 1 1
1 1 1
M= 0 1 1 // pourquoi la première valeur est modifiée ???
1 1 1
1 1 1
M= 4013776 1 1 // est là encore une fois ?
1 1 1
1 1 1
Merci d'avance pour votre aide.