| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 496 人关注过本帖
标题:运算符重载,不能得到运算结果,高手请进
只看楼主 加入收藏
ouyangouyang
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:273
专家分:579
注 册:2009-10-8
结帖率:96%
收藏
已结贴  问题点数:40 回复次数:7 
运算符重载,不能得到运算结果,高手请进
#include"iostream.h"
class A
{
    public:
        A(int i=0,int j=0)
    {
        a=i;
        b=j;
    }
    void p()
    {
        for(int k=0;k<a;k++)
            for(int l=0;l<b;l++)
              cin>>o[k][l];
    }
    A operator+(A c)
    {
        A d;
for(int k=0;k<a;k++)
            for(int l=0;l<b;l++)
    d.o[k][l]=o[k][l]+c.o[k][l];
return d;
    }
    void print()
    {
       for(int k=0;k<a;k++)
        for(int l=0;l<b;l++)
           cout<<o[k][l]<<"           ";

    }
    private:
        int a,b;
         double o[10][10];
};
main()
{
    cout<<"请输入行列式的值";
    A s(2,2),ss(2,2),sss(2,2);
        s.p();
    ss.p();
        sss=s+ss;
    sss.print();
}
程序想得到的结果是两数组相加,但是不行,看看出了什么问题
搜索更多相关主题的帖子: 运算符 结果 重载 
2010-07-21 09:32
mxs810
Rank: 9Rank: 9Rank: 9
来 自:火星
等 级:贵宾
威 望:16
帖 子:234
专家分:1122
注 册:2006-10-19
收藏
得分:10 
在以下代码 A operator+(A c)
    {
        A d;
for(int k=0;k<a;k++)
            for(int l=0;l<b;l++)
    d.o[k][l]=o[k][l]+c.o[k][l];
//缺少了大小的赋值
        d.a = a;
        d.b = b;
return d;
    }

另外cout<<o[k][l]<<"           ";
改为cout<<o[k][l]<<endl;

哈哈

授人以鱼不如授人以渔
2010-07-21 11:42
gq198718
Rank: 4
等 级:业余侠客
威 望:1
帖 子:86
专家分:200
注 册:2010-6-6
收藏
得分:0 
你的那个太阳是怎么来的
2010-07-21 11:56
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:20 
你默认构造函数会构造 0 * 0 的矩阵。你在加法里用的 d,构造时没有参数,因此是 0 * 0 的。

其实你这个逻辑靠不住呀。如果两个矩阵不一样大也能加吗?


[ 本帖最后由 pangding 于 2010-7-21 12:03 编辑 ]
2010-07-21 12:02
gq198718
Rank: 4
等 级:业余侠客
威 望:1
帖 子:86
专家分:200
注 册:2010-6-6
收藏
得分:0 
#include"iostream"
using namespace std;

class A
{
    public:
        A(){}
        A(int i,int j)
    {
        a=i;
        b=j;
    }
    void p()
    {
        for(int k=0;k<a;k++)
           {
            for(int m=0;m<b;m++)
              cin>>o[k][m];
            }
            for(int k=0;k<a;k++)
            {
            {
            for(int m=0;m<b;m++)
            cout<<o[k][m]<<" ";
            }
            cout<<endl;
            }
     }
    A operator+(A c)
    {
        A d;
        d.a = a;
        d.b = b;
       for(int k=0;k<a;k++)
            for(int l=0;l<b;l++)
      d.o[k][l]=o[k][l]+c.o[k][l];
       return d;
    }
    void print()
    {
       for(int k=0;k<a;k++)
        for(int l=0;l<b;l++)
           cout<<o[k][l]<<"           ";

    }
   public:
        int a,b;
         int o[10][10];
};
void main()
{
    cout<<"请输入行列式的值"<<endl;
    A s(2,2),ss(2,2),sss(2,2);
        s.p();
        cout<<endl;
        ss.p();
        /*sss=s+ss;*/
        sss=s.operator +(ss);
        sss.print();
}
2010-07-21 12:10
ouyangouyang
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:273
专家分:579
注 册:2009-10-8
收藏
得分:0 
程序通过,我想问一下,我程序里的sss(2,2)不是给a,b赋值了吗?为什么还要来后面那一句,顺便说一下我以前是学c的,c++一些东东不知道

多少恨, 昨夜梦魂中。 还似旧时游上苑, 车如流水马如龙; 花月正春风!
2010-07-21 12:20
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:10 
sss=s+ss 的时候,等号传过来的 d 会把原来的盖掉。
2010-07-22 01:24
ouyangouyang
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:273
专家分:579
注 册:2009-10-8
收藏
得分:0 
看来还是孤陋寡闻啦,以后要好好学习

多少恨, 昨夜梦魂中。 还似旧时游上苑, 车如流水马如龙; 花月正春风!
2010-07-22 20:28
快速回复:运算符重载,不能得到运算结果,高手请进
数据加载中...
 
   



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

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