题目描述
下面主函数和Array类完成矩阵的输入、输出。请补齐Array类中需要的成员函数。
提示:根据已给代码分析CArray需要重载哪些运算符?
输入
测试次数
每组测试数据格式如下:
正整数n、m,分表表示矩阵的行、列
n*m行整数数据
输出
每组测试数据输出矩阵数据两次,具体输出格式见样例。
输入样例
2
3 3
1 2 3
4 5 6
7 8 9
2 4
10 20 30 40
50 60 70 80
输出
MatrixA:
1 2 3
4 5 6
7 8 9
MatrixB:
1 2 3
4 5 6
7 8 9
MatrixA:
10 20 30 40
50 60 70 80
MatrixB:
10 20 30 40
50 60 70 80
代码框架
#include <iostream>
using namespace std;
class CArray //矩阵类
{
int n, m; //n行,m列
int **data; //存储矩阵数据
public:
CArray():data(nullptr){}
CArray(int nValue, int mValue);
~CArray();
//补齐CArray的其它成员函数及实现
/********** Write your code here! **********/
/*******************************************/
//CArray构造函数
CArray::CArray(int nValue, int mValue) : n(nValue), m(mValue)
{
// 分配n行m列空间
data = new int *[n];
for (int i = 0; i < n; i++)
{
data[i] = new int[m];
}
}
//CArray析构函数
CArray::~CArray()
{
// 释放空间
for (int i = 0; i < n; i++)
{
delete[] data[i];
}
delete[] data;
}
//主函数
int main()
{
int t;
int n, m;
int i, j;
cin >> t;
while (t--)
{
cin >> n >> m; // 输入矩阵行n, 列m
CArray matrixA(n, m); // 定义matrixA对象
for (i = 0; i < n; ++i) // 输入n行m列数据
for (j = 0; j < m; j++)
cin >> matrixA[i][j];
cout << "MatrixA:" << endl;
for (i = 0; i < n; ++i) // 输出matrixA中的数据
{
for (j = 0; j < m; j++)
{
cout << matrixA(i,j) << " ";
}
cout << endl;
}
cout << "MatrixB:" << endl;
CArray matrixB; // 定义matrixB对象
matrixB = matrixA; // 赋值
for (i = 0; i < n; ++i) // 输出matrixB对象
{
for (j = 0; j < m; j++)
{
cout << matrixB[i][j] << " ";
}
cout << endl;
}
}
return 0;
}
#include <iostream>
using namespace std;
class CArray //矩阵类
{
int n, m; //n行,m列
int** data; //存储矩阵数据
public:
CArray() :data(nullptr) {}
CArray(int nValue, int mValue);
~CArray();
//补齐CArray的其它成员函数及实现
/********** Write your code here! **********/
CArray(const CArray& other) : n(other.n), m(other.m) {
// 分配空间并复制数据
data = new int* [n];
for (int i = 0; i < n; ++i) {
data[i] = new int[m];
for (int j = 0; j < m; ++j) {
data[i][j] = other.data[i][j];
}
}
}
// 赋值运算符重载:用于对象赋值
CArray& operator=(const CArray& other) {
// 避免自我赋值
if (this != &other) {
// 释放原有空间
if (data != nullptr) {
for (int i = 0; i < n; ++i) {
delete[] data[i];
}
delete[] data;
}
// 分配空间并复制数据
n = other.n;
m = other.m;
data = new int* [n];
for (int i = 0; i < n; ++i) {
data[i] = new int[m];
for (int j = 0; j < m; ++j) {
data[i][j] = other.data[i][j];
}
}
}
return *this;
}
// 下标运算符重载:用于访问矩阵元素
int* operator[](int idx) {
return data[idx];
}
// const 下标运算符重载:用于访问矩阵元素(const 对象)
const int* operator[](int idx) const {
return data[idx];
}
// 函数调用运算符重载:用于输出矩阵数据
int operator()(int i, int j) const {
return data[i][j];
}
};
/*******************************************/
//CArray构造函数
CArray::CArray(int nValue, int mValue) : n(nValue), m(mValue)
{
// 分配n行m列空间
data = new int* [n];
for (int i = 0; i < n; i++)
{
data[i] = new int[m];
}
}
//CArray析构函数
CArray::~CArray()
{
// 释放空间
for (int i = 0; i < n; i++)
{
delete[] data[i];
}
delete[] data;
}
//主函数
int main()
{
int t;
int n, m;
int i, j;
cin >> t;
while (t--)
{
cin >> n >> m; // 输入矩阵行n, 列m
CArray matrixA(n, m); // 定义matrixA对象
for (i = 0; i < n; ++i) // 输入n行m列数据
for (j = 0; j < m; j++)
cin >> matrixA[i][j];
cout << "MatrixA:" << endl;
for (i = 0; i < n; ++i) // 输出matrixA中的数据
{
for (j = 0; j < m; j++)
{
cout << matrixA(i, j) << " ";
}
cout << endl;
}
cout << "MatrixB:" << endl;
CArray matrixB; // 定义matrixB对象
matrixB = matrixA; // 赋值
for (i = 0; i < n; ++i) // 输出matrixB对象
{
for (j = 0; j < m; j++)
{
cout << matrixB[i][j] << " ";
}
cout << endl;
}
}
return 0;
}