3、定义一个矩阵类 Matrix,均为 M 行 N 列,通过重载运算符“+”、“-”,“<<”,“>>”,“++”,“--”,“==”,“!=”来实现矩阵的相加、相减、输出、输入、自增、自减以及相等、不等的判断。
时间: 2023-11-05 18:51:29 浏览: 38
下面是一个示例实现:
```c++
#include <iostream>
using namespace std;
class Matrix {
private:
int M, N;
int** data; // 二维动态数组指针
public:
Matrix(int M, int N) : M(M), N(N) {
data = new int*[M];
for (int i = 0; i < M; ++i) {
data[i] = new int[N];
}
}
Matrix(const Matrix& other) : M(other.M), N(other.N) {
data = new int*[M];
for (int i = 0; i < M; ++i) {
data[i] = new int[N];
for (int j = 0; j < N; ++j) {
data[i][j] = other.data[i][j];
}
}
}
~Matrix() {
for (int i = 0; i < M; ++i) {
delete[] data[i];
}
delete[] data;
}
Matrix& operator=(const Matrix& other) {
if (this == &other) {
return *this;
}
for (int i = 0; i < M; ++i) {
delete[] data[i];
}
delete[] data;
M = other.M;
N = other.N;
data = new int*[M];
for (int i = 0; i < M; ++i) {
data[i] = new int[N];
for (int j = 0; j < N; ++j) {
data[i][j] = other.data[i][j];
}
}
return *this;
}
Matrix operator+(const Matrix& other) const {
if (M != other.M || N != other.N) {
throw "Matrix size not match!";
}
Matrix result(M, N);
for (int i = 0; i < M; ++i) {
for (int j = 0; j < N; ++j) {
result.data[i][j] = data[i][j] + other.data[i][j];
}
}
return result;
}
Matrix operator-(const Matrix& other) const {
if (M != other.M || N != other.N) {
throw "Matrix size not match!";
}
Matrix result(M, N);
for (int i = 0; i < M; ++i) {
for (int j = 0; j < N; ++j) {
result.data[i][j] = data[i][j] - other.data[i][j];
}
}
return result;
}
Matrix& operator++() { // 前置自增
for (int i = 0; i < M; ++i) {
for (int j = 0; j < N; ++j) {
++data[i][j];
}
}
return *this;
}
Matrix& operator--() { // 前置自减
for (int i = 0; i < M; ++i) {
for (int j = 0; j < N; ++j) {
--data[i][j];
}
}
return *this;
}
Matrix operator++(int) { // 后置自增
Matrix temp(*this);
++(*this);
return temp;
}
Matrix operator--(int) { // 后置自减
Matrix temp(*this);
--(*this);
return temp;
}
bool operator==(const Matrix& other) const {
if (M != other.M || N != other.N) {
return false;
}
for (int i = 0; i < M; ++i) {
for (int j = 0; j < N; ++j) {
if (data[i][j] != other.data[i][j]) {
return false;
}
}
}
return true;
}
bool operator!=(const Matrix& other) const {
return !(*this == other);
}
friend ostream& operator<<(ostream& os, const Matrix& matrix) {
for (int i = 0; i < matrix.M; ++i) {
for (int j = 0; j < matrix.N; ++j) {
os << matrix.data[i][j] << "\t";
}
os << endl;
}
return os;
}
friend istream& operator>>(istream& is, Matrix& matrix) {
for (int i = 0; i < matrix.M; ++i) {
for (int j = 0; j < matrix.N; ++j) {
is >> matrix.data[i][j];
}
}
return is;
}
};
int main() {
Matrix A(3, 3), B(3, 3);
cout << "Enter matrix A:" << endl;
cin >> A;
cout << "Enter matrix B:" << endl;
cin >> B;
cout << "A + B:" << endl << A + B << endl;
cout << "A - B:" << endl << A - B << endl;
A++;
cout << "A++:" << endl << A << endl;
--B;
cout << "B--:" << endl << B << endl;
cout << "A == B: " << (A == B) << endl;
cout << "A != B: " << (A != B) << endl;
return 0;
}
```
运行结果示例:
```
Enter matrix A:
1 2 3
4 5 6
7 8 9
Enter matrix B:
9 8 7
6 5 4
3 2 1
A + B:
10 10 10
10 10 10
10 10 10
A - B:
-8 -6 -4
-2 0 2
4 6 8
A++:
2 3 4
5 6 7
8 9 10
B--:
8 7 6
5 4 3
2 1 0
A == B: 0
A != B: 1
```