// test2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class Matrix
{
public:
Matrix(int x,int y);
~Matrix();
void Print();
void Input();
Matrix(const Matrix &s);
friend Matrix operator * (const Matrix &s1,const Matrix &s2) ; //要将*重载为该类的友元函数
private:
int m,n;
double **data;
};
/*------------构造函数-----------------*/
Matrix::Matrix(int x,int y)
{
m=x;
n=y;
data=new double* [m];
int i(0),j(0);
for(;i!=m;i++)
data[i]=new double [n];
for(i=0;i!=m;i++)
for(j=0;j!=n;j++)
data[i][j]=0;
}
/*------------析构函数-----------------*/
Matrix::~Matrix()
{
for(int j=0;j!=m;j++)
delete[] data[j];
}
/*------------输出矩阵-----------------*/
void Matrix::Print()
{
int i,j;
for(i=0;i!=m;i++)
{
for(j=0;j!=n;j++)
{
cout<<data[i][j]<<" ";
}
cout<<endl;
}
}
/*------------输入矩阵-----------------*/
void Matrix::Input()
{
for(int i=0;i!=m;i++)
for(int j=0;j!=n;j++)
cin>>data[i][j];
}
m=src.m;
n=src.n;
int i,j;
data=new double* [m];
for(i=0;i<m;i++)
data[i]=new double[n];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
data[i][j]=src.data[i][j];
}
{
if(s1.n!=s2.m)
{
cout<<"两矩阵无法相乘!"<<endl;
exit(0);
}
Matrix result(s1.m,s2.n);
for(int i=0;i!=s1.m;i++)
for(int j=0;j!=s2.n;j++)
for(int k=0;k!=s1.n;k++)
result.data[i][j]+=s1.data[i][k]*s2.data[k][j];
return result;
}
{
int x(0),y(0);
cout<<"请输入矩阵1的行:";
cin>>x;
cout<<"请输入矩阵1的列:";
cin>>y;
Matrix A(x,y);
cout<<"请输入矩阵1的元素,元素个数为:"<<x<<"*"<<y<<endl;
A.Input();
cout<<"请输入矩阵2的行:";
cin>>x;
cout<<"请输入矩阵2的列:";
cin>>y;
Matrix B(x,y);
cout<<"请输入矩阵2的元素,元素个数为:"<<x<<"*"<<y<<endl;
B.Input();
Matrix C=A*B; //Matrix C= operator*(A,B);也可以
C.Print();
system("pause");
return 0;
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class Matrix
{
public:
Matrix(int x,int y);
~Matrix();
void Print();
void Input();
Matrix(const Matrix &s);
friend Matrix operator * (const Matrix &s1,const Matrix &s2) ; //要将*重载为该类的友元函数
private:
int m,n;
double **data;
};
/*------------构造函数-----------------*/
Matrix::Matrix(int x,int y)
{
m=x;
n=y;
data=new double* [m];
int i(0),j(0);
for(;i!=m;i++)
data[i]=new double [n];
for(i=0;i!=m;i++)
for(j=0;j!=n;j++)
data[i][j]=0;
}
/*------------析构函数-----------------*/
Matrix::~Matrix()
{
for(int j=0;j!=m;j++)
delete[] data[j];
}
/*------------输出矩阵-----------------*/
void Matrix::Print()
{
int i,j;
for(i=0;i!=m;i++)
{
for(j=0;j!=n;j++)
{
cout<<data[i][j]<<" ";
}
cout<<endl;
}
}
/*------------输入矩阵-----------------*/
void Matrix::Input()
{
for(int i=0;i!=m;i++)
for(int j=0;j!=n;j++)
cin>>data[i][j];
}
/*------------拷贝构造函数-----------------*/
Matrix::Matrix( const Matrix &src)
{m=src.m;
n=src.n;
int i,j;
data=new double* [m];
for(i=0;i<m;i++)
data[i]=new double[n];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
data[i][j]=src.data[i][j];
}
/*------------乘法运算符重载-----------------*/
Matrix operator * (const Matrix &s1,const Matrix &s2){
if(s1.n!=s2.m)
{
cout<<"两矩阵无法相乘!"<<endl;
exit(0);
}
Matrix result(s1.m,s2.n);
for(int i=0;i!=s1.m;i++)
for(int j=0;j!=s2.n;j++)
for(int k=0;k!=s1.n;k++)
result.data[i][j]+=s1.data[i][k]*s2.data[k][j];
return result;
}
{
int x(0),y(0);
cout<<"请输入矩阵1的行:";
cin>>x;
cout<<"请输入矩阵1的列:";
cin>>y;
Matrix A(x,y);
cout<<"请输入矩阵1的元素,元素个数为:"<<x<<"*"<<y<<endl;
A.Input();
cout<<"请输入矩阵2的行:";
cin>>x;
cout<<"请输入矩阵2的列:";
cin>>y;
Matrix B(x,y);
cout<<"请输入矩阵2的元素,元素个数为:"<<x<<"*"<<y<<endl;
B.Input();
Matrix C=A*B; //Matrix C= operator*(A,B);也可以
C.Print();
system("pause");
return 0;
}
【过程中曾出现过如下问题】:http://bbs.youkuaiyun.com/topics/390804720?page=1#post-397524154