注册 登录
编程论坛 C++教室

运算符重载,不能得到运算结果,高手请进

ouyangouyang 发布于 2010-07-21 09:32, 496 次点击
#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();
}
程序想得到的结果是两数组相加,但是不行,看看出了什么问题
7 回复
#2
mxs8102010-07-21 11:42
在以下代码 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;

哈哈
#3
gq1987182010-07-21 11:56
你的那个太阳是怎么来的
#4
pangding2010-07-21 12:02
你默认构造函数会构造 0 * 0 的矩阵。你在加法里用的 d,构造时没有参数,因此是 0 * 0 的。

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


[ 本帖最后由 pangding 于 2010-7-21 12:03 编辑 ]
#5
gq1987182010-07-21 12:10
#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();
}
#6
ouyangouyang2010-07-21 12:20
程序通过,我想问一下,我程序里的sss(2,2)不是给a,b赋值了吗?为什么还要来后面那一句,顺便说一下我以前是学c的,c++一些东东不知道
#7
pangding2010-07-22 01:24
sss=s+ss 的时候,等号传过来的 d 会把原来的盖掉。
#8
ouyangouyang2010-07-22 20:28
看来还是孤陋寡闻啦,以后要好好学习
1