【发布时间】:2020-06-30 20:00:47
【问题描述】:
请帮助我,因为我是编程新手,我已经制作了这个程序,它对我来说看起来不错,但我得到的是垃圾值而不是两个矩阵的总和。我已经应用了运算符重载的概念来找到总和两个矩阵,但我一次又一次地得到垃圾值?请帮我看看问题出在哪里?谢谢。任何帮助都非常感谢
#include<iostream>
#include<string>
using namespace std;
class Matrix {
private:
int matrix[2][2];
public:
Matrix operator + (Matrix Sum)
{
Matrix sum[2][2];
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
sum[i][j].matrix[i][j] = matrix[i][j] + Sum.matrix[i][j];
return(sum[i][j]);
}
}
}
void setMatrix(int m[][2])
{
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
matrix[i][j] = m[i][j];
}
}
}
void Display()
{
cout << "\n\nThe matrix finally equals: ";
for (int i = 0; i < 2; i++)
{
cout << " ";
for (int j = 0; j < 2; j++)
{
cout<<matrix[i][j];
if (j == 2 - 1)
cout << endl;
}
}
}
};
int main()
{
Matrix m1, m2,sum;
const int size=2;
int matrix1[size][size];
int matrix2[size][size];
cout << "Enter the values of matrix 1 (2 X 2)\n\n";
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
cin >> matrix1[i][j];
}
}
cout << "Enter the values of matrix 2 (2 X 2)\n\n";
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
cin >> matrix2[i][j];
}
}
cout <<"\n\nSetting the values now\n\n";
m1.setMatrix(matrix1);
m2.setMatrix(matrix2);
sum = m1 + m2;
cout << "\n\nMatrix 1 (2 X 2) is : ";
for (int i = 0; i < size; ++i)
{
for (int j = 0; j < size; ++j)
{
cout << matrix1[i][j] << " ";
if (j == size - 1)
cout << endl;
}
}
cout << "\n\nMatrix 2 (2 X 2) is : ";
for (int i = 0; i < size; ++i)
{
for (int j = 0; j < size; ++j)
{
cout << matrix2[i][j] << " ";
if (j == size - 1)
cout << endl;
}
}
cout << "\n\nSum of two matrices is equal to (2 X 2) is : ";
sum.Display();
return 0;
}
【问题讨论】:
-
我认为您需要花一些时间to explain your code to your rubber duck(或室友或其他合适的替代方案)。您的
operator+函数至少有两个问题,这样的解释应该可以帮助您找到。 -
@RichardCritten 是这么想的,但
sum[i][j]实际上是Matrix。 -
@churill 刚刚发现
sum和Sum在同一个函数中 -
您在第一次循环迭代中返回,所以
i和j都不会有除0之外的任何值。只有sum[0][0].matrix[0][0]会有一个初始化值;其他 3 个矩阵条目将是垃圾。 -
@bilal 这对编译器来说不是问题 - 这对我们容易出错的人来说是个问题
标签: c++ oop operator-overloading garbage