c++实现:采用抽象数据类型的方式定义矩阵并实现两个三阶矩阵加法和乘法。
时间: 2024-09-30 09:08:30 浏览: 44
在 C++ 中,我们可以采用抽象数据类型 (Abstract Data Type, ADT) 的方式来设计一个矩阵类,然后分别实现加法和乘法操作。这里我们将创建一个 Matrix 类,包含行数、列数以及存储矩阵元素的数据成员,同时提供虚函数 (virtual functions) 来支持多态。
```cpp
#include <iostream>
using namespace std;
// 定义矩阵抽象基类
class Matrix {
protected:
int rows;
int cols;
virtual void display() const = 0; // 纯虚函数,用于展示矩阵
public:
Matrix(int r, int c): rows(r), cols(c) {}
int getRows() const { return rows; }
int getCols() const { return cols; }
};
// 三维数组作为具体的矩阵实现
class SquareMatrix : public Matrix {
private:
double data[3][3]; // 三阶方阵
public:
SquareMatrix(int r, int c, double (*arr)[3]) {
if (r != c)
throw "SquareMatrix only supports square matrices.";
rows = cols = r;
for (int i = 0; i < r; ++i)
for (int j = 0; j < c; ++j)
data[i][j] = arr[i][j];
}
// 显示矩阵
void display() const override {
cout << "[";
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
cout << data[i][j] << (j == cols - 1 ? "]" : ", ");
}
}
cout << endl;
}
};
// 加法和乘法的实现(假设只处理同类型的矩阵)
class Adder {
public:
static SquareMatrix add(const SquareMatrix& a, const SquareMatrix& b) {
if (a.getRows() != b.getRows() || a.getCols() != b.getCols())
throw "Matrices must have the same dimensions for addition.";
SquareMatrix result(a.getRows(), a.getCols(), nullptr);
for (int i = 0; i < result.getRows(); ++i) {
for (int j = 0; j < result.getCols(); ++j) {
result.data[i][j] = a.data[i][j] + b.data[i][j];
}
}
return result;
}
};
class Multiplier {
public:
static SquareMatrix multiply(const SquareMatrix& a, const SquareMatrix& b) {
if (a.getCols() != b.getRows())
throw "Incompatible matrix sizes for multiplication.";
SquareMatrix result(a.getRows(), b.getCols(), nullptr);
for (int i = 0; i < result.getRows(); ++i) {
for (int j = 0; j < result.getCols(); ++j) {
double sum = 0;
for (int k = 0; k < a.getCols(); ++k)
sum += a.data[i][k] * b.data[k][j];
result.data[i][j] = sum;
}
}
return result;
}
};
// 主函数演示
int main() {
SquareMatrix m1(3, 3, {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}});
SquareMatrix m2(3, 3, {{9, 8, 7}, {6, 5, 4}, {3, 2, 1}});
try {
SquareMatrix sum = Adder::add(m1, m2);
cout << "Sum of matrices:" << endl;
sum.display();
SquareMatrix product = Multiplier::multiply(m1, m2);
cout << "Product of matrices:" << endl;
product.display();
} catch (const char* msg) {
cerr << msg << endl;
}
return 0;
}
```
在这个例子中,`SquareMatrix` 是矩阵的具体实现,它继承自 `Matrix` 并实现了显示矩阵的功能。`Adder` 和 `Multiplier` 类提供了对矩阵加法和乘法的操作,并通过静态函数接收矩阵对象作为参数。注意这里是简化版本,实际项目中可能需要更全面的错误处理和边界检查。
阅读全文