Salve a tutti, vi posto di seguito il codice che dovrebbe restituire ad un utente, una volta
inseriti i valori per ogni cella e dunque riempite le matrici A e B, una terza matrice C che
rappresenta la somma delle prime due.
MAIN
codice:
#include "stdafx.h"
int main(int argc, char* argv[]){
//costruisce tre matrici 2X2
CMatrix A(2,2);
CMatrix B(2,2);
CMatrix C(2,2);
A.leggiValori(); //richiede all’utente di inserire i valori di A
B.leggiValori(); //richiede all’utente di inserire i valori di B
A.stampaValori();
B.stampaValori();
C.stampaValori();
C=A+B; //esegue la somma tra le due matrici costruite
C.stampaValori(); //stampa a video valori
system("PAUSE");
return 0;
}
INTERFACCIA CLASSE MATRIX
codice:
class CMatrix{
private:
int **m_mat;
int m_row, m_col;
void allocaMemMat(int m_row, int m_col);
void deleteMat();
public:
CMatrix();
virtual ~CMatrix();
CMatrix(int row, int col);
void stampaValori();
void leggiValori();
CMatrix operator+(const CMatrix & C);
CMatrix & operator=(const CMatrix & C);
};
IMPLEMENTAZIONE DELL'INTERFACCIA
codice:
#include "stdafx.h"
CMatrix::CMatrix(){
m_row=m_col=0;
m_mat=0;
}
CMatrix::~CMatrix(){
deleteMat();
}
CMatrix::CMatrix(int row, int col){
m_row=row;
m_col=col;
allocaMemMat(m_row, m_col);
}
void CMatrix::deleteMat(){
for (int i=0; i<m_row; i++)
delete[] m_mat[i];
delete[] m_mat;
m_col=m_row=0;
m_mat=0;
}
void CMatrix::allocaMemMat(int row, int col){
//Non deve esserci nessuna matrice allocata,
//usare prima delleteMat()
m_mat=new int*[m_row];
for (int i=0; i<m_row; i++)
m_mat[i]=new int[m_col];
}
CMatrix CMatrix::operator+(const CMatrix & C){
if ((C.m_row==m_row)&&(C.m_col==m_col)){
CMatrix RIS(m_row, m_col);
for (int i=0; i<m_row; i++){
for (int j=0; j<m_col; j++){
RIS.m_mat[i][j]=C.m_mat[i][j]+ m_mat[i][j];
}
}
return RIS;
}else{
CMatrix RIS;
return RIS;
}
}
CMatrix& CMatrix::operator=(const CMatrix & C){
deleteMat();//cancellazione memoria dinamica
m_row=C.m_row;
m_col=C.m_col;
allocaMemMat(m_row, m_col);//alloco memoria dinamica
for (int i=0; i<m_row; i++)
for (int j=0; j<m_col; j++)
m_mat[i][j] = C.m_mat[i][j];
return *this;
}
void CMatrix::leggiValori(){
int val = 0;
for(int x = 0; x < m_row; x++)
for(int y = 0; y < m_col; y++){
cout<<"Inserisci un numero per la cella: ";
cin>>val;
m_mat[x][y] = val;
}
}
void CMatrix::stampaValori(){
for(int x = 0; x < m_row; x++){
for(int y = 0; y < m_col; y++)
cout<<m_mat[x][y];
cout<<"\n";
}
}
Ricevo un'eccezione e l'esecuzione non supera i due cicli for dell'overload dell'operatore "=".
Provando a fare delle stampe sono sicuro che dentro RIS ci sia la matrice risultante dalla
somma corretta, ma putroppo al metodo CMatrix& CMatrix:
perator=(const CMatrix & C)
arrivano due matrici non inizializzate ovvero m_mat (ci sta l'ho appena allocata) e C.m_mat.
La seconda non deve essere vuota ma dovrebbe essere un riferimento a RIS calcolata
precedentemente...
Quasi sicuramente sbaglio il passaggio di parametri, aiuto...
Grazie.