Buongiorno,
sto avendo alcuni problemi con un programma utile alle operazioni sulle matrici. Nello specifico ho creato la classe Matrice e le diverse funzioni (prodotto righe per colonne, matrice trasposta etc). Queste funzioni returnano ognuna un oggetto di tipo Matrice, tuttavia non riesco in nessun modo a riutilizzare i nuovi oggetti che le funzioni creano e quindi a fare ulteriori operazioni (per esempio una trasposta di una trasposta). Il problema potrebbe essere nella distruzione inaspettata degli oggetti che vengono creati oppure in errori nell'implementazione del costruttore di copia o dell'overload dell'operatore =. Posto alcune parti di codice.

codice:
codice:
//ClassMatrix.h
#ifndef CLASSMATRIX_H
#define CLASSMATRIX_H
#include <iostream>
#include <cmath>
using namespace std;
class Matrice
{


public:
//int a;
float** matrice;
Matrice(int a);
~Matrice();
Matrice (Matrice& m);
Matrice operator= (const Matrice n);
void Stampa(int a);




friend ostream& operator<< (ostream& os, Matrice& m);
friend istream& operator>> (istream& is, Matrice& m); 


};




// ClassMatrix.cpp
#include "ClassMatrix.h"
#include <iostream>
#include <cmath>
using namespace std;




Matrice::Matrice (int a) // costruttore
{


matrice = new float* [a];
for (int i=0; i<a; i++)
{
matrice[i]= new float [a];
for (int j=0; j<a; j++)
matrice [i][j] = 0;
{
}
}
cout << "Ho costruito una matrice nulla di dimensioni " << a <<" x "<< a << endl;
};


Matrice::~Matrice()
{
cout << "Oggetto eliminato" << endl;
};


Matrice::Matrice(Matrice& m) //costruttore di copia
{


matrice=m.matrice;


}; 




Matrice Matrice::operator=(const Matrice n)
{
matrice=n.matrice;
return *this;
};


ostream& operator<< (ostream& os, Matrice& m) 
{
int a;
for (int i=0; i<a; i++)
{
for (int j=0; j<a; j++)
{
cout << "    ";
os << m.matrice[i][j];


}


cout << endl;
}
return os;
}


istream& operator>> (istream& is, Matrice& m) {
int a,i,j;


cout << "Inserire i vettori riga separando ogni componente con uno SPAZIO: \n";


for (i=0; i<a; i++)
{
cout << "Vettore riga " << i << " : ";
for (j=0; j<a; j++)
{
is >> m.matrice[i][j];
}
}
return is;
};




Matrice Trasposta (int a, Matrice m)
{


Matrice n(m);
for (int i=0; i<a; i++)
{
for (int j=0; j<a; j++)
{
n.matrice[i][j]=m.matrice[j][i];
}
}
return  n;
};






Matrice Prodotto(int a, Matrice m, Matrice n  )
{
Matrice p(a);
for (int I=0;I<a;I++)
{
for  (int J=0;J<a;J++)
{
for (int h=0; h<a; h++)
{
p.matrice[I][J]=p.matrice[I][J] + m.matrice[I][h]*n.matrice[h][J];
}


}
}
return p;
};




int main ()
{ 
cout << "Operazioni su matrici " << endl;
int r;
do
{
cout << "Le dimensioni della matrice sono: " << endl;
cin >> r;
} while (r<=0); 


Matrice m(r);
//cout << m << endl;
cin >> m;
cout << m << endl;
Matrice n(r);
cin >> n;
cout << n << endl;
Trasposta(r,m);
Prodotto(r,m,n);
}
Il programma così scritto funziona, riesco a inserire le matrici n ed m e fare su di esse le operazioni. Il problema è svolgere operazioni su matrici che sono risultati delle funzioni sia Prodotto che Trasposta.


Vi ringrazio per l'attenzione.
LeonardoG