我似乎无法通过函数或其他方式访问类变量,而在我重载的<
我正在编写一个使用重载运算符执行各种矩阵功能的程序。现在,我正在尝试使函数使用大小不是3x3的矩阵,并且这些函数早先使用了全局变量s
,但是我希望在rows
和<<
之前重新定义>>
叫。
#include <iostream>
using namespace std;
#define s 3
class Matrix
{
private:
public:
int rows,cols;
int rows1, rows2, cols1, cols2;
int **m;
void setRows(int rowsa);
int getRows();
Matrix()
{
m = new int *[10];
for (int i = 0; i < 10; i++)
{
m[i] = new int[10];
}
}
friend Matrix operator+(Matrix &m1, Matrix &m2);
friend Matrix operator-(Matrix &m1, Matrix &m2);
friend Matrix operator*(Matrix &m1, Matrix &m2);
friend ostream &operator<<(ostream &os, Matrix &m1);
friend istream &operator>>(istream &is, Matrix &m1);
};
Matrix operator+(Matrix &m1, Matrix &m2)
{
Matrix m3 = Matrix();
for (int i = 0; i < s; i++)
{
for (int j = 0; j < s; j++)
m3.m[i][j] = m1.m[i][j] + m2.m[i][j];
}
return m3;
}
Matrix operator-(Matrix &m1, Matrix &m2)
{
Matrix m3 = Matrix();
for (int i = 0; i < s; i++)
{
for (int j = 0; j < s; j++)
m3.m[i][j] = m1.m[i][j] - m2.m[i][j];
}
return m3;
}
Matrix operator*(Matrix &m1, Matrix &m2)
{
Matrix m3 = Matrix();
Matrix rix;
for (int i = 0; i < rix.rows1; i++)
{
for (int j = 0; j < rix.cols2; j++)
{
for (int k = 0; k < rix.cols1; k++)
{
m3.m[i][j] = m1.m[i][k] * m2.m[k][j];
}
}
}
return m3;
}
ostream &operator<<(ostream &os, Matrix &m)
{
Matrix rix;
for (int i = 0; i < rix.rows; i++)
{
for (int j = 0; j < rix.cols; j++)
os << m.m[i][j] << " ";
os << "\n";
}
return os;
}
istream &operator>>(istream &is, Matrix &m1)
{
//overloaded >> to input the values of a matrix
// PROBLEM IS HERE
Matrix rix;
cout<<"value of rows1"<<rix.rows1<<endl;
cout<<"value of rows"<<rix.rows<<endl;
cout<<"value of getRows"<<rix.getRows()<<endl;
int k;
for (int i = 0; i < rix.rows; i++)
{
for (int j = 0; j < rix.cols; j++)
{
cout << "Enter element "
<< "(" << i << "," << j << "): ";
cin >> k;
m1.m[i][j] = k;
}
}
}
void Matrix::setRows(int rowsa){
rows= rowsa;
}
int Matrix::getRows(){
return rows;
}
int main()
{
int rosx;
Matrix m1 = Matrix();
Matrix m2 = Matrix();
Matrix rix;
cout << "Number of rows for the first Matrix? (max 10)" << endl;
cin >> rix.rows1;
cout << "Number of columns for the first Matrix? (max 10)" << endl;
cin >> rix.cols1;
cout << "Number of rows for the second Matrix? (max 10)" << endl;
cin >> rix.rows2;
cout << "Number of columns for the second Matrix? (max 10)" << endl;
cin >> rix.cols2;
cout << "input the elements of the first matrix: " << endl;
rix.setRows(rix.rows1);
cout <<rix.rows;
cin >> m1;
cout << m1;
cout << "input the elements of the second matrix: " << endl;
rix.rows = rix.rows2;
rix.cols = rix.cols2;
cin >> m2;
cout << m2;
Matrix m3 = m1 * m2;
cout << "output" << endl;
cout << m3;
return 0;
}
您的值是垃圾,因为您的构造函数没有为变量提供任何值。
Matrix()
{
m = new int *[10];
for (int i = 0; i < 10; i++)
{
m[i] = new int[10];
}
}
[在此构造函数的任何地方都没有给rows
,cols
,rows1
,rows2
,cols1
或cols2.
赋值,因此它们具有垃圾值也就不足为奇了。
我想应该是
Matrix()
{
m = new int *[10];
for (int i = 0; i < 10; i++)
{
m[i] = new int[10];
}
rows = 10;
cols = 10;
}
尽管我不明白为什么您有三个行变量和三个cols变量。
另一个误解是您有两个名为rix
的变量>
。int main() { int rosx; Matrix m1 = Matrix(); Matrix m2 = Matrix(); Matrix rix; // one variable called rix istream &operator>>(istream &is, Matrix &m1) { //overloaded >> to input the values of a matrix // PROBLEM IS HERE Matrix rix; // another variable called rix
很明显,您认为它们是相同的变量,但不是。不同函数中的两个变量是不同的变量即使它们具有相同的名称
这里是另一个误解
ostream &operator<<(ostream &os, Matrix &m) { Matrix rix; for (int i = 0; i < rix.rows; i++) { for (int j = 0; j < rix.cols; j++) os << m.m[i][j] << " "; os << "\n"; } return os; }
出于某种原因,您已经编写了此函数以打印出变量
m
,但使用的是完全不同的变量rix
中的行和列。那没有任何意义。行和列应来自变量m
,因为这是您要打印的矩阵。
真的,我只是在刮擦表面。此代码充满误解。您需要查看C ++的工作方式。特别是构造函数的工作方式,变量的工作方式,以及对您正在编写的代码进行更理性的思考。它必须有意义。
我会再次开始。这将是第二次更好的代码。