根据main函数中矩阵对象的定义与使用,定义相关的矩阵类Array,并利用运算符重载的方法实现矩阵的加法与输入输出操作。(为简化问题,矩阵中元素为2位以内整数,要求矩阵按照行列的格式输出,每个元素占3位宽度) 类定义: class Array /* 请在这里填写答案 */ 测试程序样例: int main() { Array arr1,arr2,arr3; cin>>arr1; cin>>arr2; cout<<arr1<<endl; cout<<arr2<<endl; arr3=arr1+arr2; cout<<arr3; return 0; } 输入样例: 1 2 3 4 5 6 7 8 9 1 11 12 输出样例: 1 2 3 4 5 6 7 8 9 1 11 12 8 10 12 5 16 18
时间: 2024-02-14 22:15:03 浏览: 174
下面是题目要求的矩阵类 Array 的定义和实现:
```cpp
#include <iostream>
using namespace std;
class Array {
public:
// 构造函数
Array(int rows = 0, int cols = 0): m_rows(rows), m_cols(cols) {
if (m_rows > 0 && m_cols > 0) {
m_data = new int*[m_rows];
for (int i = 0; i < m_rows; ++i) {
m_data[i] = new int[m_cols];
}
}
else {
m_data = nullptr;
}
}
// 析构函数
~Array() {
if (m_data != nullptr) {
for (int i = 0; i < m_rows; ++i) {
delete [] m_data[i];
}
delete [] m_data;
}
}
// 拷贝构造函数
Array(const Array& other) {
m_rows = other.m_rows;
m_cols = other.m_cols;
if (m_rows > 0 && m_cols > 0) {
m_data = new int*[m_rows];
for (int i = 0; i < m_rows; ++i) {
m_data[i] = new int[m_cols];
for (int j = 0; j < m_cols; ++j) {
m_data[i][j] = other.m_data[i][j];
}
}
}
else {
m_data = nullptr;
}
}
// 赋值运算符重载
Array& operator=(const Array& other) {
if (this != &other) {
if (m_data != nullptr) {
for (int i = 0; i < m_rows; ++i) {
delete [] m_data[i];
}
delete [] m_data;
}
m_rows = other.m_rows;
m_cols = other.m_cols;
if (m_rows > 0 && m_cols > 0) {
m_data = new int*[m_rows];
for (int i = 0; i < m_rows; ++i) {
m_data[i] = new int[m_cols];
for (int j = 0; j < m_cols; ++j) {
m_data[i][j] = other.m_data[i][j];
}
}
}
else {
m_data = nullptr;
}
}
return *this;
}
// 矩阵加法运算符重载
Array operator+(const Array& other) const {
if (m_rows != other.m_rows || m_cols != other.m_cols) {
return Array();
}
Array result(m_rows, m_cols);
for (int i = 0; i < m_rows; ++i) {
for (int j = 0; j < m_cols; ++j) {
result.m_data[i][j] = m_data[i][j] + other.m_data[i][j];
}
}
return result;
}
// 输入运算符重载
friend istream& operator>>(istream& in, Array& arr) {
for (int i = 0; i < arr.m_rows; ++i) {
for (int j = 0; j < arr.m_cols; ++j) {
in >> arr.m_data[i][j];
}
}
return in;
}
// 输出运算符重载
friend ostream& operator<<(ostream& out, const Array& arr) {
for (int i = 0; i < arr.m_rows; ++i) {
for (int j = 0; j < arr.m_cols; ++j) {
out.width(3);
out << arr.m_data[i][j];
}
out << endl;
}
return out;
}
private:
int m_rows; // 矩阵的行数
int m_cols; // 矩阵的列数
int** m_data; // 矩阵的数据
};
```
在上面的矩阵类中,我们定义了构造函数、析构函数、拷贝构造函数、赋值运算符重载、矩阵加法运算符重载、输入运算符重载和输出运算符重载。
矩阵的加法运算符重载比较简单,就是按照矩阵加法的规则进行计算,最后返回一个新的矩阵对象。
输入运算符重载中,我们使用了友元函数,因为我们需要访问类的私有成员变量 m_rows、m_cols 和 m_data。
输出运算符重载中,我们同样使用了友元函数,并且使用了流控制符 width() 来控制输出每个元素的宽度,以便输出矩阵时能够对齐。
在主函数中,我们可以按照题目要求进行测试:
```cpp
int main() {
Array arr1(2, 3), arr2(2, 3), arr3;
cin >> arr1 >> arr2;
cout << arr1 << endl;
cout << arr2 << endl;
arr3 = arr1 + arr2;
cout << arr3;
return 0;
}
```
这里定义了 3 个矩阵对象 arr1、arr2 和 arr3,其中 arr1 和 arr2 分别表示输入的两个矩阵,arr3 表示它们的和。接着,我们先输入 arr1 和 arr2,然后输出它们,输出完毕后,我们使用运算符重载将 arr1 和 arr2 相加,将结果保存在 arr3 中,最后输出 arr3 即可。
阅读全文