用模板技术,实现一个矩阵类CMatrixT,基本要求如下:1.实现构造、拷贝构造与析构函数;2.支持任意大小的矩阵,行数和列数可以动态设置(不用修改代码);3.重载操作符*,实现矩阵相乘;4.重载操作符=,实现矩阵赋值;5.重载操作符++和--,分别实现矩阵元素同时+1和-1;在main函数中对以上功能进行调用。
时间: 2024-03-07 09:46:32 浏览: 64
好的,我来解答你的问题。
以下是实现矩阵类CMatrixT的代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
class CMatrixT {
private:
vector<vector<T>> matrix;
int rows;
int cols;
public:
// 构造函数
CMatrixT(int r = 0, int c = 0):rows(r),cols(c){
matrix.resize(rows);
for(int i=0;i<rows;i++){
matrix[i].resize(cols);
}
}
// 拷贝构造函数
CMatrixT(const CMatrixT<T>& other):rows(other.rows), cols(other.cols){
matrix.resize(rows);
for(int i=0;i<rows;i++){
matrix[i].resize(cols);
}
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
matrix[i][j] = other.matrix[i][j];
}
}
}
// 析构函数
~CMatrixT(){}
// 重载赋值操作符
CMatrixT<T>& operator=(const CMatrixT<T>& other){
if(this == &other){
return *this;
}
rows = other.rows;
cols = other.cols;
matrix.resize(rows);
for(int i=0;i<rows;i++){
matrix[i].resize(cols);
}
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
matrix[i][j] = other.matrix[i][j];
}
}
return *this;
}
// 重载乘法操作符
CMatrixT<T> operator*(const CMatrixT<T>& other){
if(cols != other.rows){
throw "矩阵相乘不符合规则!";
}
CMatrixT<T> res(rows, other.cols);
for(int i=0;i<rows;i++){
for(int j=0;j<other.cols;j++){
res.matrix[i][j] = 0;
for(int k=0;k<cols;k++){
res.matrix[i][j] += matrix[i][k] * other.matrix[k][j];
}
}
}
return res;
}
// 重载++操作符
CMatrixT<T>& operator++(){
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
matrix[i][j]++;
}
}
return *this;
}
// 重载--操作符
CMatrixT<T>& operator--(){
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
matrix[i][j]--;
}
}
return *this;
}
// 打印矩阵
void print(){
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
cout << matrix[i][j] << " ";
}
cout << endl;
}
}
// 获取行数
int getRows(){
return rows;
}
// 获取列数
int getCols(){
return cols;
}
};
int main() {
// 创建矩阵a
CMatrixT<int> a(2, 3);
a.print();
// 创建矩阵b
CMatrixT<int> b(3, 2);
b.print();
// 矩阵相乘
CMatrixT<int> c = a * b;
c.print();
// 矩阵元素+1
++a;
a.print();
// 矩阵元素-1
--b;
b.print();
// 矩阵赋值
CMatrixT<int> d = c;
d.print();
return 0;
}
```
希望能够帮到你!
阅读全文