任务如下:用组件数据描述类“数字矩阵”:矩阵的尺寸,指向元素的指针。重载操作:<<(矩阵输出到屏幕上),+(矩阵相加),一元¬-(更改每个元素的符号),/ =(将每个元素除以数字)。我执行了它,并正确执行了它,但是您需要通过键盘设置矩阵尺寸,并且可以看到,它是为我预先设置的[3] [3]。听起来很简单,但是我真的很蠢。在此先感谢您的帮助。这是代码:
#include "pch.h"
#include <iostream>
using namespace std;
class Matrix
{
public:
Matrix()
{
int Table[3][3];
}
int Table[3][3];
void Create()
{
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
Table[i][j] = 10;
}
};
ostream& operator <<(ostream& t, Matrix a)
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
t << a.Table[i][j] << " ";
t << "\n";
}
return t;
}
Matrix& operator /=(Matrix& a, int num)
{
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
a.Table[i][j] /= num;
return a;
}
Matrix& operator -(Matrix& a, int empty)
{
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
a.Table[i][j] = -a.Table[i][j];
return a;
}
Matrix& operator +(Matrix& a, Matrix b)
{
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
a.Table[i][j] += b.Table[i][j];
return a;
}
int main()
{
int u;
setlocale(LC_ALL, "Russian");
Matrix Example;
Example.Create();
Matrix Example1;
Example1.Create();
cout << Example;
cout << Example1;
cout << "Сумма матриц: "<<endl;
cout << Example + Example1;
Example - 1;
Example1 - 1;
cout<< Example + Example1;
cout << "На сколько вы хотите её поделить?\n";
cin >> u;
Example /= u;
Example1 /= u;
cout << Example;
cout << Example1;
}`
答案 0 :(得分:0)
您需要动态创建矩阵。 为此,您需要使用指标(*)。更改int表[3] [3] 双人桌**;
如何实现它的示例(请注意,我使用矩阵而不是表格)
class Matrix {
private:
double** matrix;
int col;
int row;
public:
Matrix(){};
void Create(int row, int col);
};
void Matrix::Create(int row_, int col_){
double val = 0.0;
col = col_; // initalize private members
row = row_;
matrix = new double*[row]; // Create a new array of size row_
for(int i = 0; i < row; i++)
{
matrix[i] = new double[col]; // Create new cols of size col (inside array of row)
}
for(int i = 0; i < row; i++)
{
for(int j = 0; j < col; j++)
{
matrix[i][j] = val;
val = val + 1.0;
}
}
}
为简单起见,我尝试重用您的设计,但我确实建议您尝试在构造函数中指定矩阵的尺寸,甚至可能在其中构造矩阵。 像这样:
Matrix(int row_, int col_) : row(row_), col(col_) {*/ create matrix here /*};
您可以跳过“在此处创建矩阵”部分,并根据需要使用自己的Create()。
答案 1 :(得分:0)
您需要为此动态分配内存。除非明确告知您,否则我不会摆弄指针(新建/删除)。作为初学者,您可能应该使用标准模板库(STL)工具:
std::vector<std::vector<int>> Table
并使用int Table[3][3]
代替Matrix(std::size_t rows, std::size_t cols)
{
Table.resize(rows);
for (unsigned int i = 0; i < Table.size(); ++i)
Table[i].resize(cols);
}
。然后编写这样的构造函数:
Matrix& operator +(Matrix& a, Matrix b)
{
unsigned int rows = a.Table.size();
unsigned int cols = a.Table[0].size();
for (unsigned int i = 0; i < rows; i++)
for (unsigned int j = 0; j < cols; j++)
a.Table[i][j] += b.Table[i][j];
return a;
}
您还可以存储矩阵的维数,但是无需这样做,因为您可以从向量中获取信息。将所有循环中的硬编码尺寸替换为相应的动态尺寸(存储或从矢量中提取)。例如:
<ShellContent ...
Route="defRoute" />
但是,此向量载体并不是真正有效。最好是单个向量,但我想对于初学者来说还可以。
问候