#include
using namespace std;
template
//模板参数并非常见的T,下面会说明原因
class Matrix {
public:
Matrix(int row, int col);
//Matrix(const Matrix
~Matrix();
int Row()const { return m_row; }
int Col()const { return m_col; }
double& operator()(int row, int col);
double operator() (int row, int col)const;
void datacin(const Matrix& m);
void print(const Matrix& m);
//下式中运算符重载的函数前加上了template
//也正因友元函数不属于类,友元函数模板参数也需跟类模板的参数区分开,所以一个用了U 一个用了T。当然,也可以把两者理解成不同的形参
template
template
template
private:
double** data;
// 二维指针—二维数组
int m_row;//矩阵的行
int m_col;//矩阵的列
};
template
Matrix
m_row = row;
m_col = col;
data = new double* [row];
for (int i = 0; i < row; i++) {
data[i] = new double[col];
for (int j = 0; j < col; j++) {
data[i][j] = 0;
}
}
}
template
Matrix
{
for (int i = 0; i < m_row; i++) {
delete[]data[i];
}
delete[]data;
}
template
double& Matrix
{
if (row >= m_row || col >= m_col) {
cout << "Wrong!" << endl;
}
return data[row][col];
}
template
double Matrix
{
if (row >= m_row || col >= m_col) {
cout << "Wrong!" << endl;
}
return data[row][col];
}
template
Matrix
if (m1.Col() != m2.Col() || m1.Row() != m2.Row()) {
cout << "Wrong!" << endl;
}
Matrix
for (int i = 0; i < m1.Row(); i++) {
for (int j = 0; j < m1.Col(); j++) {
addmar(i, j) = m1(i, j) + m2(i, j);
}
}
return addmar;
}
template
Matrix
if (m1.Col() != m2.Col() || m1.Row() != m2.Row()) {
cout << "Wrong!" << endl;
}
Matrix
for (int i = 0; i < m1.Row(); i++) {
for (int j = 0; j < m1.Col(); j++) {
submar(i, j) = m1(i, j) - m2(i, j);
}
}
return submar;
}
template
Matrix
if (m1.Col() != m2.Row()) {
cout << "Wrong!" << endl;
}
Matrix
for (int i = 0; i < m1.Row(); i++) {
for (int j = 0; j < m2.Col(); j++) {
for (int k = 0; k < m2.Row(); k++)
{
mulmar(i,j) += m1(i, k) * m2(k, j);
}
}
}
return mulmar;
}
template
void Matrix
for (int i = 0; i < m.Row(); i++) {
for (int j = 0; j < m.Col(); j++) {
cin >> m.data[i][j];
}
}
}
template
void Matrix
{
for (int i = 0; i < m.Row(); i++) {
for (int j = 0; j < m.Col(); j++) {
cout << m.data[i][j] <<" ";
}
puts("");
}
}
int main()
{
int r1, c1;
cout << "输入矩阵的行和列:";
cin >> r1 >> c1;
Matrix
cout << "输入int数据" << endl;
m1.datacin(m1);
// m1.print(m1);
int r2, c2;
cout << "输入矩阵的行和列:";
cin >> r2 >> c2;
Matrix
cout << "输入int数据" << endl;
m2.datacin(m2);
//m2.print(m2);
Matrix
m3.print(m3);
}



