描述:设计一个基于 C++面向对象编程的程序。实现矩阵乘法。要求使用模板技术支持不同数据类型的矩阵。 要求: 1.定义一个模板类Matrix”,表示矩阵。类中需要包含矩阵的行数、列数和数据 2.为Matrix类实现构造函数、接受行数、列数和一个用于初始化矩阵元素的值 3.为Matrix类实现一个成员函数 multiply,实现矩阵柔法。如果两个矩阵无法相乘 (例如行数和列数不匹配),则抛出一个异常。重载矩阵乘法操作符 4.实现一个友元函数~operator*,重载矩阵乘法操作符 示例: cpp int main { try { Matrix<int> mat1(2,3,1); Matrix<int> mat2(3,2.2). Matrix<int> result = mat1- mat2: result.print(); }catch (const std:exception& e){ std::cout <<"Error:"<< e.whatl std::endl } return 0; }
时间: 2024-04-07 21:34:02 浏览: 146
以下是一个实现矩阵乘法的基于C++面向对象编程的程序示例:
```cpp
#include <iostream>
#include <vector>
template<typename T>
class Matrix {
private:
int rows;
int cols;
std::vector<std::vector<T>> data;
public:
Matrix(int numRows, int numCols, T value) : rows(numRows), cols(numCols), data(numRows, std::vector<T>(numCols, value)) {}
Matrix<T> multiply(const Matrix<T>& other) const {
if (cols != other.rows) {
throw std::runtime_error("Matrix dimensions do not match");
}
Matrix<T> result(rows, other.cols, 0);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < other.cols; j++) {
for (int k = 0; k < cols; k++) {
result.data[i][j] += data[i][k] * other.data[k][j];
}
}
}
return result;
}
void print() const {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
std::cout << data[i][j] << " ";
}
std::cout << std::endl;
}
}
template<typename U>
friend Matrix<U> operator*(const Matrix<U>& lhs, const Matrix<U>& rhs);
};
template<typename U>
Matrix<U> operator*(const Matrix<U>& lhs, const Matrix<U>& rhs) {
return lhs.multiply(rhs);
}
int main() {
try {
Matrix<int> mat1(2, 3, 1);
Matrix<int> mat2(3, 2, 2);
Matrix<int> result = mat1 * mat2;
result.print();
} catch (const std::exception& e) {
std::cout << "Error: " << e.what() << std::endl;
}
return 0;
}
```
这个程序定义了一个模板类`Matrix`,用于表示矩阵。它包含了矩阵的行数、列数以及数据。构造函数接受行数、列数和一个用于初始化矩阵元素的值。成员函数`multiply`实现了矩阵乘法,如果两个矩阵无法相乘,则抛出一个异常。友元函数`operator*`重载了矩阵乘法操作符。
在示例的`main`函数中,创建了两个矩阵`mat1`和`mat2`,然后调用`multiply`函数进行矩阵乘法,并将结果打印出来。如果发生异常,则捕获并打印错误信息。
阅读全文