c++ - C++中的类矩阵
问题描述
当我输入 2 个矩阵时,程序停止了。它不打印总和,甚至“2 个矩阵的总和”这个词也没有打印。我不知道这是否与分配错误有关,因为当我使用静态数组或向量时,结果是正确的。我不知道如何解决它。希望大家帮忙!非常感谢!
#include <iostream>
using namespace std;
class Matrix
{
private:
int** value;
int row;
int col;
public:
Matrix();
Matrix(int, int);
Matrix(const Matrix&);
Matrix operator + (const Matrix&);
friend istream& operator >> (istream&, Matrix&);
friend ostream& operator << (ostream&, Matrix&);
~Matrix(void);
};
int main(void)
{
Matrix a, b, c;
cout << "Input 1st matrix: ";
cin >> a;
cout << a;
cout << "Input 2nd matrix: ";
cin >> b;
cout << b;
c = a + b;
cout << "Sum of 2 matrices: " << c << endl;
return 0;
}
Matrix::Matrix()
{
this->row = 0;
this->col = 0;
value = new int *[row];
for(int i = 0; i < row; i++)
{
value[i] = new int[col];
}
for(int i = 0; i < row; i++)
{
for(int j = 0; j < col; j++)
{
value[i][j] = 0;
}
}
}
Matrix::Matrix(int b, int c)
{
this->row = b;
this->col = c;
value = new int *[row];
for (int i = 0; i < this->row; i++)
{
value[i] = new int[col];
}
}
Matrix::Matrix(const Matrix &a)
{
this->row = a.row;
this->col = a.col;
value = new int *[row];
for (int i = 0; i < row; i++)
{
value[i] = new int[col];
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
value[i][j] = a.value[i][j];
}
}
}
istream& operator >> (istream& ip, Matrix& a)
{
cout << endl;
cout << "Input rows: ";
ip >> a.row;
cout << "Input cols: ";
ip >> a.col;
a.value = new int* [a.row];
for (int i = 0; i < a.row; i++)
{
a.value[i] = new int[a.col];
}
for (int i = 0; i < a.row; i++)
{
for (int j = 0; j < a.col; j++)
{
cout << "[" << i << "]" << "[" << j << "]" << " : ";
ip >> a.value[i][j];
}
}
return ip;
}
ostream& operator << (ostream& op, Matrix& a)
{
for (int i = 0; i < a.row; i++)
{
for (int j = 0; j < a.col; j++)
{
op << a.value[i][j] << " ";
}
op << endl;
}
return op;
}
Matrix Matrix::operator + (const Matrix &a)
{
Matrix tg;
for (int i = 0; i < a.row; i++)
{
for (int j = 0; j < a.col; j++)
{
tg.value[i][j] = this->value[i][j] + a.value[i][j];
}
}
return tg;
}
Matrix::~Matrix(void)
{
for (int i = 0; i < this->row; i++)
{
delete[] value[i];
}
delete[] value;
}
解决方案
在这段代码中,您认为tg
有多少行和列?
Matrix Matrix::operator + (const Matrix &a)
{
Matrix tg;
for (int i = 0; i < a.row; i++)
{
for (int j = 0; j < a.col; j++)
{
tg.value[i][j] = this->value[i][j] + a.value[i][j];
}
}
return tg;
}
它应该是
Matrix Matrix::operator + (const Matrix &a)
{
Matrix tg(a.row, a.col); // make tg same size as a
for (int i = 0; i < a.row; i++)
{
for (int j = 0; j < a.col; j++)
{
tg.value[i][j] = this->value[i][j] + a.value[i][j];
}
}
return tg;
}
推荐阅读
- gradle - 哪个文件 gradle.properties 优先级更高?
- python - 熊猫:不能将序列乘以“str”类型的非整数
- c# - 如何从数据表中获取不同的值?
- amazon-web-services - Logstash 并从关系表中查找其他数据?
- lotus-notes - 使用 LDAP 时,什么可能导致 HTTP 403 Forbidden?
- c# - 如何在变量名c#中使用变量
- javascript - 使用 HTML 和 Javascript 调用 XML API
- intellij-idea - 如何在自动完成后阻止 IntelliJ 放置分号?
- c# - .在通过 Appium 1.9.1 在 Android 8.0.0 上进行浏览器测试时以 C# 显示抛出
- javascript - 如何使用 Flask 和 jQuery 显示/隐藏回复文本框?