| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 905 人关注过本帖
标题:求助(关于运算符重载的一个c++程序)
取消只看楼主 加入收藏
fanzhiyu1989
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-11-28
收藏
 问题点数:0 回复次数:1 
求助(关于运算符重载的一个c++程序)
//我是出学者,下面程序是运算符重载
//int  Matrix::operator()(int i,int j);
 //重载()m(k,l)表示取矩阵m中第k行,第l列元素
//friend Matrix operator+(Matrix &m1, Matrix &m2);
//重载+   两矩阵对应元素相加
//friend Matrix operator-(Matrix &m1, Matrix &m2);
//重载-   两矩阵对应元素相减
//编译时总是友元函数出问题,希望帮助解答一下,
//非常感谢!
#include<iostream>
using namespace std;
class Matrix           //矩阵类
 {
  private:
    const int rows,cols;  //矩阵的行数和列数
    int * mem;  //动态申请矩阵空间    
  public:
    Matrix(int r,int c,int *m);                                      
    Matrix(Matrix &m);//拷贝构造函数
    int operator()(int i,int j);
    void operator=(Matrix &m);
    friend Matrix operator+(Matrix &m1,Matrix &m2); //编译的时候从这行开始出错
    friend Matrix operator-(Matrix &m1,Matrix &m2);
    void print();
    ~Matrix() {delete mem;}
  };
//类中的常数据成员需用构造函数的初始化表来初始化
 Matrix::Matrix(int r,int c,int *m):rows(r),cols(c)  
 {int i;
  mem=new int[r*c];
  for(i=0;i<r*c;i++)
    mem[i]=m[i];
}                    
 
 Matrix::Matrix(Matrix &m):rows(m.rows),cols(m.cols)
 {int i;
 mem=new int[m.rows*m.cols];
 for(i=0;i<m.rows*m.cols;i++)
   mem[i]=m.mem[i];
 }

 int Matrix::operator()(int i,int j)
 {int k;
  k=(i-1)*cols+j;
     return(mem[k-1]);
 }

void Matrix::operator=(Matrix &m)
{int i;
 mem=new int[m.rows*m.cols];
 for(i=0;i<m.rows*m.cols;i++)
   mem[i]=m.mem[i];
}

 Matrix operator+(Matrix &m1, Matrix &m2)
 {Matrix m3;
  int i;
  for(i=0;i<m1.rows*m1.cols;i++)
  m3.mem[i]=m1.mem[i]+m2.mem[i];
  return m3;
 }
 
 Matrix operator-(Matrix &m1, Matrix &m2)
 {Matrix m3;
  int i;
  for(i=0;i<m1.rows*m2.cols;i++)
  m3.mem[i]=m1.mem[i]-m2.mem[i];
  return m3;
 }

 void Matrix::print()
 {int k;
  for(k=0;k<rows*cols;k++)
     { cout<<mem[k]<<" ";
       if((k+1)%cols==0)   
           cout<<endl;                    //换行
     }
 }

 
int main()
{ int a[9]={2,0,0,0,2,0,0,0,2};
  int b[9]={1,0,0,0,1,0,0,0,1};
    Matrix mat1(3,3,a),mat2(3,3,b);
 cout<<"矩阵1:"<<endl;
 mat1.print();
 cout<<"矩阵2:"<<endl;
 mat2.print();
 cout<<"矩阵1第1行第1列元素是:"<<mat1(1,1)<<endl;   //取矩阵mat1的第1行第1列元素
 cout<<"矩阵2第1行第2列元素是:"<<mat1(1,2)<<endl;   //取矩阵mat2的第1行第2列元素
 Matrix mat3=mat1+mat2;
 Matrix mat4=mat1-mat2;
 cout<<"矩阵1与矩阵2之和是:";
 mat3.print();
 cout<<"矩阵1与矩阵2之差是:";
 mat4.print();
 return 0;
}
搜索更多相关主题的帖子: 运算符 重载 
2008-11-28 15:55
fanzhiyu1989
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-11-28
收藏
得分:0 
非常感谢帮我改了这个程序,可是改后的程序在 viusal c++6.0简体中文企业版  运行时还是显示INTERNAL COMPILER ERROR
想请问一下是不是编译工具的问题
2008-11-30 12:30
快速回复:求助(关于运算符重载的一个c++程序)
数据加载中...
 
   



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

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