请教~这个程序运行不出来结果
这个关于矩阵相乘的程序~可是运行不出来结果~请赐教。。
#include "stdafx.h "
#include <iostream>
using namespace std;
class Matris
{
private:
int row,cols,**p;
public:
Matris(int a,int b):row(a),cols(b){}
Matris();
~Matris();
void set_matris();
Matris operator*(Matris &);
void show_matrix();
};
Matris::Matris()
{
p=new int *[row];
for(int i=0;i <cols;i++)
p[i]=new int [cols];
}
Matris::~Matris()
{
for(int i=0;i <cols;i++)
delete [] p[i];
delete [] p;
}
void Matris::set_matris()
{
for(int i=0;i <row;i++)
for(int j=0;j <cols;j++)
cin> > p[i][j];
}
Matris Matris::operator *(Matris & a)
{
Matris c;
if(this-> cols==a.row)
{
for(int i=0;i <this-> row;i++)
for(int j=0;j <a.cols;j++)
for(int k=0;k <this-> cols;k++)
c.p[i][j]=c.p[i][j] + this-> p[i][k]*a.p[k][j];
}
return c;
}
void Matris::show_matrix()
{
for(int i=0;i <row;i++)
for(int j=0;j <cols;j++)
cout < <p[i][j] < < " ";
cout < <endl;
}
int main()
{
Matris a(2,3),b(3,2),c;
a.set_matris();
b.set_matris();
a.show_matrix();
cout < < "********* ";
b.show_matrix();
cout < < "************ ";
c=a*b;
c.show_matrix();
return 0;
}
[解决办法]
哈哈,出来了,加了个COPY构造函数,而且乘法也正确了:
#include <iostream>
#include <string>
using namespace std;
class Matris
{
private:
Matris();
int row,cols,**p;
public:
Matris(const Matris &);
Matris(int a,int b):row(a),cols(b){
p=new int *[row];
for(int i=0;i <row;i++)//cols -> row
p[i]=new int [cols];
}
~Matris();
void set_matris();
Matris operator*(Matris &);
Matris & operator=(const Matris &);
void show_matrix();
};
//Matris::Matris()
//{
//p=new int *[row];
//for(int i=0;i <row;i++)//cols -> row
//p[i]=new int [cols];
//}
Matris::~Matris()
{
for(int i=0;i <row;i++)//cols -> row
delete [] p[i];
delete [] p;
}
void Matris::set_matris()
{
cout < < "输入 " < <(row*cols) < < "个数 " < <endl;
for(int i=0;i <row;i++)
for(int j=0;j <cols;j++)
cin> > p[i][j];
}
Matris Matris::operator *(Matris & a)
{
Matris c(this-> row,a.cols);
int sum = 0;
if(this-> cols==a.row)
{
for(int i=0;i <this-> row;i++)
for(int j=0;j <a.cols;j++)
{
for(int k=0;k <this-> cols;k++)
{
sum += (this-> p[i][k])*(a.p[k][j]);
}
c.p[i][j] = sum;
sum = 0;
}
}
return c;
}
Matris::Matris(const Matris &a)
{
row = a.row;
cols = a.cols;
p=new int *[row];
for(int i=0;i <row;i++)
p[i]=new int [cols];
for (int j=0; j <row; ++j)
for (int k=0; k <cols; ++k)
p[j][k] = a.p[j][k];
}
void Matris::show_matrix()
{
for(int i=0;i <row;i++)
for(int j=0;j <cols;j++)
cout < <p[i][j] < < " ";
cout < <endl;
}
int main()
{
Matris a(2,3),b(3,2);
a.set_matris();
b.set_matris();
a.show_matrix();
cout < < "********* ";
b.show_matrix();
cout < < "********* ";
Matris c(a*b);
c.show_matrix();
return 0;
}