| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 883 人关注过本帖
标题:运算符的重载老出错
只看楼主 加入收藏
djy5043
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2007-5-9
收藏
 问题点数:0 回复次数:5 
运算符的重载老出错
有几个编译错误实在看不明白

matrix_overload.rar (285.74 KB)
搜索更多相关主题的帖子: 运算符 重载 
2008-04-30 21:18
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
你还是把代码贴下吧..这几天电脑中毒...附件不敢下载...

学习需要安静。。海盗要重新来过。。
2008-05-01 14:18
djy5043
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2007-5-9
收藏
得分:0 
/*用运算符的重载写矩阵的输入输出,加法,减法,乘法
用rows,cols存放行列序号,并用new动态创建float型数组,用于存储矩阵中各元素的值,并重载()读出矩阵指定位置的值*/
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
class matrix{
private:
    int rows;
    int cols;
    float* temp;
public:
    matrix(int a,int b):rows(a),cols(b)
    {temp=new float[8][8];}               //这一步老出错
    void inputm()
    {
        for(int i=0;i<rows;i++)
            for(int j=0;j<cols;j++)
                cin>>*(*(temp+i)+j);
    }
    /*
    istream& operator>>(istream&in,matrix & m)
    {
        for(int i=0;i<rows;i++)
            for(j=0;j<cols;j++)
                cin>>*(*(temp+i)+j);
    }
    */
    float operator()(int r,int c)        //重载(),很重要
    {
        return *(*(temp+r)+c);
    }
//--------------------------------------以下是友元函数,并非这个类的公有函数--------------------------------------
    friend matrix& operator+(matrix& m1,matrix& m2)
    {
        matrix m3(m1.rows,m1.cols);
        if(m1.rows==m2.rows&&m1.cols==m2.cols)
        {
            for(int i=0;i<m1.rows;i++)
                for(int j=0;j<m1.cols;j++)
                    m3(i,j)=m1(i,j)+m2(i,j);
            return m3;
        }
        else {return m1;cout<<"矩阵行列数不匹配!";}
    }
    friend matrix& operator-(matrix& m1,matrix& m2)
    {
        matrix m3(m1.rows,m1.cols);
        if(m1.rows==m2.rows&&m1.cols==m2.cols)
        {
            for(int i=0;i<m1.rows;i++)
                for(int j=0;j<m1.cols;j++)
                    m3(i,j)=m1(i,j)-m2(i,j);
            return m3;
        }
        else {return m1;cout<<"矩阵行列数不匹配!";}
    }
    friend matrix& operator*(matrix& m1,matrix& m2)
    {
        matrix m3(m1.rows,m1.cols);
        if(m1.cols==m2.rows)
        {
            for(int i=0;i<m1.rows;i++)
                for(int j=0;j<m2.cols;j++)
                    m3(i,j)=m1(i,j)*m2(j,i);
            return m3;
        }
        else {return m1;cout<<"矩阵行列数不匹配!";}
    }
    friend ostream& operator<<(ostream&out,matrix& m)
    {
        for(int i=0;i<m.rows;i++)
        {
            for(int j=0;j<m.cols;j++)
                cout<<setw(9)<<m(i,j);
                cout<<endl;
        }
    }
};
void main()
{
    matrix A(2,3),B(2,3),C(3,2);
    A.inputm();
    B.inputm();
    C.inputm();
    /*cin>>A(2,3);
    cin>>B(2,3);
    cin>>C(3,2);*/
    cout<<"A+B="<<A+B;
    cout<<"A-B="<<A-B;
    cout<<"A*B="<<A*B;
    cout<<A+C;
}
2008-05-02 10:37
djy5043
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2007-5-9
收藏
得分:0 
谢谢你
我用的是visual c++2005 express editon
2008-05-02 10:38
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
还有局部变量的引用问题...你可以自己改下
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
#define R 8;
#define C 8;
namespace demo{
class matrix{
private:
    int rows;
    int cols;
    float temp[R][C];
public:
    matrix(int a,int b):rows(a),cols(b)
    {   

        
    }               
    void inputm()
    {
        for(int i=0;i<rows;i++)
            for(int j=0;j<cols;j++)
                cin>>*(*(temp+i)+j);
    }
   
    float *operator()(int r,int c)        
    {
        return *(temp+r)+c;
    }
    //--------------------------------------以下是友元函数,并非这个类的公有函数--------------------------------------
    friend matrix& operator+(matrix& m1,matrix& m2)
    {
        matrix m3(m1.rows,m1.cols);
        if(m1.rows==m2.rows&&m1.cols==m2.cols)
        {
            for(int i=0;i<m1.rows;i++)
                for(int j=0;j<m1.cols;j++)
                    *m3(i,j)=*m1(i,j)+*m2(i,j);
            return m3;
        }
        else {return m1;cout<<"矩阵行列数不匹配!";}
    }
    friend matrix& operator-(matrix& m1,matrix& m2)
    {
        matrix m3(m1.rows,m1.cols);
        if(m1.rows==m2.rows&&m1.cols==m2.cols)
        {
            for(int i=0;i<m1.rows;i++)
                for(int j=0;j<m1.cols;j++)
                    *m3(i,j)=*m1(i,j)-*m2(i,j);
            return m3;
        }
        else {return m1;cout<<"矩阵行列数不匹配!";}
    }
    friend matrix& operator*(matrix& m1,matrix& m2)
    {
        matrix m3(m1.rows,m1.cols);
        if(m1.cols==m2.rows)
        {
            for(int i=0;i<m1.rows;i++)
                for(int j=0;j<m2.cols;j++)
                    *m3(i,j)=*m1(i,j)**m2(j,i);
            return m3;
        }
        else {return m1;cout<<"矩阵行列数不匹配!";}
    }
    friend  operator<<(ostream&out,matrix& m)
    {
        for(int i=0;i<m.rows;i++)
        {
            for(int j=0;j<m.cols;j++)
                cout<<setw(9)<<m(i,j);
                cout<<endl;
        }
    }
};
}
void main()
{
    demo::matrix A(2,3),B(2,3),C(3,2);
    A.inputm();
    B.inputm();
    C.inputm();
   
    cout<<"A+B="<<A+B;
    cout<<"A-B="<<A-B;
    cout<<"A*B="<<A*B;
    cout<<A+C;
}

[[it] 本帖最后由 sunkaidong 于 2008-5-2 12:42 编辑 [/it]]

学习需要安静。。海盗要重新来过。。
2008-05-02 12:40
djy5043
Rank: 1
等 级:新手上路
帖 子:89
专家分:0
注 册:2007-5-9
收藏
得分:0 
谢谢
改出来了
2008-05-03 11:04
快速回复:运算符的重载老出错
数据加载中...
 
   



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

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