| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3153 人关注过本帖
标题:要求实现矩阵的加法,减法,乘法,利用重载运算符,指针完成, 急
只看楼主 加入收藏
新生儿宝贝
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-5-22
结帖率:100%
收藏
 问题点数:0 回复次数:2 
要求实现矩阵的加法,减法,乘法,利用重载运算符,指针完成, 急
#include "math.h"
#include "iostream.h"
const int m=2;                                 //设定的行数
const int n=3;                                 //设定的列数
 class matrix                                 //矩阵类
 {
 private: int mem[m][n];
 public:
        matrix();                             //无参构造函数
        matrix(int a[m][n]);                    //含参构造函数
 friend matrix operator+(matrix &a,matrix &b);    //运算符加重载
 friend matrix operator-(matrix &a,matrix &b);    //运算符减重载
 friend matrix operator*(matrix &a,matrix &b);    //运算符乘重载
 void display();                              //显示函数
 };
 matrix::matrix()                          //无参时设定为零矩阵
 {
    for(int i=0;i<m;i++)
       for(int j=0;j<n;j++)
        mem[i][j]=0;
 }
 matrix::matrix(int a[m][n])                 //有参时将矩阵赋值
{
    for(int i=0;i<m;i++)
       for(int j=0;j<n;j++)
          mem[i][j]=a[i][j];
}
matrix operator +(matrix &a,matrix &b)   //加号重载时将要相加的两个矩阵的元//素依次相加后赋给第三个类并把第三个类返回
{
    matrix  c;
    int i,j;
    for(i=0;i<m;i++)
       for(j=0;j<n;j++)
    c.mem[i][j]=a.mem[i][j]+b.mem[i][j];
    return c;
}
matrix operator -(matrix &a,matrix &b)  //减号重载时将要相减的两个矩阵
//的元素依次相减后赋给第三个类并把第三个类返回
{
    matrix  c;
    int i,j;
       for(i=0;i<m;i++)
       for(j=0;j<n;j++)
    c.mem[i][j]=a.mem[i][j]-b.mem[i][j];
    return c;
}
matrix operator *(matrix &a,matrix &b) //乘号重载时将要相乘的两个矩阵的元素
//相乘后赋给第三个矩阵并把它返回  
{
    matrix  c;                                    
    int i,j,k;
    for(i=0;i<m;i++)                     //先确定某一行
      for(k=0;k<n;k++)                  //确定乘积的列
       for(j=0;j<n;j++)                  //确定原第一个矩阵的列和第二个行
   c.mem[i][k]+=a.mem[i][j]*b.mem[j][k];//乘积的结果赋给第三个矩阵的某一个元素        
       return c;
}
void matrix::display()
{
    int i,j;
    for(i=1;i<m+1;i++)
    {
       cout<<"     ";
       for(j=1;j<n+1;j++)
       {
          cout<<mem[i-1][j-1]<<' ';
           if(j==n)                             //如果等于列数则换行
          cout<<endl;
       }
    }
}
void main()
{
    int a[m][n],b[m][n];
    int i=0,j=0;         
    cout<<"输入第一个矩阵X:"<<endl;                   //输入矩阵
    cout<<"*********************************"<<endl;
    for(i=0;i<m;i++)
       for(j=0;j<n;j++)
          cin>>a[i][j];
    cout<<"********************************"<<endl;
    cout<<"输入第二个矩阵Y:"<<endl;                   //输入矩阵
    for(i=0;i<m;i++)
       for(j=0;j<n;j++)
          cin>>b[i][j];
    cout<<"*******************************"<<endl;      //输出第一个矩阵
    matrix x(a),y(b);
    cout<<"x="<<endl;
    x.display();
    cout<<"*******************************"<<endl;      //输出第二个矩阵
    cout<<"y="<<endl;
    y.display();
    cout<<"********************************"<<endl;      //输出矩阵的和
    cout<<"x+y="<<endl;
    (x+y).display();
    cout<<"********************************"<<endl;      //输出矩阵的差
    cout<<"x-y="<<endl;
    (x-y).display();
    cout<<"********************************"<<endl;      //输出矩阵的积
    cout<<"x*y="<<endl;
    (x*y).display();
    cout<<"********************************"<<endl;
}

最后为什么乘法会实现不了啊

有没有高手能重新鞋一个出来啊

[ 本帖最后由 新生儿宝贝 于 2011-5-22 14:21 编辑 ]
搜索更多相关主题的帖子: private 
2011-05-22 14:01
cn3l
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-5-22
收藏
得分:0 
因为这两个矩阵不能乘
2011-05-22 16:00
tisyang
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:132
专家分:737
注 册:2011-5-7
收藏
得分:0 
Matrix.zip (2.6 KB)

C++ 用无参数构造函数生成对象时候请勿在构造函数后添加无用的那一对括号,否则有可能会被当成函数声明而忽略,嗯,栈上构建的时候就是这样。
2011-05-23 02:29
快速回复:要求实现矩阵的加法,减法,乘法,利用重载运算符,指针完成, 急
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052744 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved