Klasse matrix neben
Ich habe ein Programm, dass ist wohl addiert zwei Matrizen, aber wenn es um das hinzufügen der Teil in der main-es wird einfach stecken und tut nichts. Ich habe ein Durcheinander mit diesem für einige Zeit, aber ohne Erfolg. Jede Hilfe oder Empfehlungen wäre willkommen.
#include <iostream>
using namespace std;
class matrix
{
private:
int **p, m, n;
public:
matrix(int row, int col)
{
m = row;
n = col;
p = new int*[m];
for (int i = 0; i < m; i++)
p[i] = new int[n];
}
~matrix()
{
for (int i = 0; i < m; i++)
delete p[i];
delete p;
}
void fill()
{
cout<<"Enter the matrix elements:";
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
cin >> p[i][j];
}
}
}
void display()
{
cout <<"The matrix is:";
for(int i = 0; i < m; i++)
{
cout << endl;
for(int j = 0; j < n; j++)
{
cout << p[i][j] <<" ";
}
}
cout << endl;
}
matrix operator +(matrix m2)
{
matrix T(m, n);
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
T.p[i][j] = p[i][j] + m2.p[i][j];
}
}
return T;
}
matrix operator =(matrix eq)
{
m = eq.m;
n = eq.n;
p = eq.p;
return *this;
}
friend matrix operator *(matrix, matrix);
};
matrix operator *(matrix a , matrix b)
{
matrix B(1,1);
if(a.n == b.m)
{
matrix T(a.m, b.n);
for(int i = 0; i < a.m; i++)
{
for(int k = 0; k < b.n; k++)
{
T.p[i][k] = 0;
for(int j = 0; j < a.n; j++)
{
T.p[i][k]+= a.p[i][j] * b.p[j][k];
}
}
}
B = T;
}
return B;
}
int main()
{
matrix a(3,3), b(3,3);
a.fill();
a.display();
b.fill();
b.display();
cout << "addition of a and b\n";
b = b + a;
b.display();
cout << "multiplication of a and b\n";
b = (a * b);
b.display();
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihrem Programm verstößt gegen die - Regel der großen drei: es hat einen destructor, aber kein Zuweisungsoperator und kein copy-Konstruktor. Es hält die Daten verwenden von raw-Pointern, aber es ist nicht die Verwaltung ordnungsgemäße Eigentum Kopien sind fertig und Zuordnungen durchgeführt werden.
Wenn Sie Ihre matrix-Klasse kopiert und zugewiesen, Ihr Programm ist die Eingabe des Undefinierten Verhaltens Gebiet so alles passieren kann. In diesem code kopieren Konstruktion erfolgt implizit bei der übergabe einer
matrix
parameter durch den Wert, und die Zuweisung erfolgt explizit inmain
.