头像 根据main函数中矩阵对象的定义与使用,定义相关的矩阵类Array,并利用运算符重载的方法实现矩阵的加法与输入输出操作。(为简化问题,矩阵中元素为2位以内整数,要求矩阵按照行列的格式输出,每个元素占3位宽度)
时间: 2024-05-09 14:15:27 浏览: 58
好的,以下是矩阵类Array的定义和运算符重载的实现:
```c++
#include <iostream>
using namespace std;
class Array {
private:
int row, col;
int** data;
public:
Array(int r, int c) : row(r), col(c) {
data = new int*[row];
for (int i = 0; i < row; i++) {
data[i] = new int[col];
}
}
~Array() {
for (int i = 0; i < row; i++) {
delete[] data[i];
}
delete[] data;
}
int getRow() const {
return row;
}
int getCol() const {
return col;
}
int& operator() (int i, int j) {
return data[i][j];
}
const int& operator() (int i, int j) const {
return data[i][j];
}
friend Array operator+ (const Array& a, const Array& b) {
if (a.getRow() != b.getRow() || a.getCol() != b.getCol()) {
cerr << "Error: dimensions do not match." << endl;
exit(1);
}
Array res(a.getRow(), a.getCol());
for (int i = 0; i < res.getRow(); i++) {
for (int j = 0; j < res.getCol(); j++) {
res(i, j) = a(i, j) + b(i, j);
}
}
return res;
}
friend ostream& operator<< (ostream& os, const Array& a) {
for (int i = 0; i < a.getRow(); i++) {
for (int j = 0; j < a.getCol(); j++) {
os << setw(3) << a(i, j);
}
os << endl;
}
return os;
}
friend istream& operator>> (istream& is, Array& a) {
for (int i = 0; i < a.getRow(); i++) {
for (int j = 0; j < a.getCol(); j++) {
is >> a(i, j);
}
}
return is;
}
};
```
在这个矩阵类中,我们定义了一个二维整型指针来存储矩阵中的数据。通过运算符重载,我们可以使用`()`来访问矩阵中的元素,同时可以使用`+`来实现矩阵的加法,使用`<<`和`>>`来实现矩阵的输入输出。
下面是一个简单的测试程序:
```c++
int main() {
Array a(2, 3), b(2, 3);
cout << "Enter matrix A:" << endl;
cin >> a;
cout << "Enter matrix B:" << endl;
cin >> b;
Array c = a + b;
cout << "A + B = " << endl << c;
return 0;
}
```
在这个测试程序中,我们创建了两个2行3列的矩阵A和B,并让用户输入它们的值。然后,我们使用运算符重载中定义的`+`来计算A和B的和,并输出结果。
阅读全文