首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问~这个程序运行不出来结果

2012-02-20 
请教~这个程序运行不出来结果这个关于矩阵相乘的程序~可是运行不出来结果~请赐教。。#includestdafx.h #in

请教~这个程序运行不出来结果
这个关于矩阵相乘的程序~可是运行不出来结果~请赐教。。
#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;
}

热点排行