ybq19513345431 2023-06-02 14:07 采纳率: 28.6%
浏览 26
已结题

关于#c++#的问题:计算二维数组相加

哪位能帮我解释一下这个代码哪里出错了!

//重载+,<<,>>运算符,计算二维数组相加。
#include<iostream>
using namespace std;
class Mat
{
public:
    friend Mat operator+(Mat& a, Mat& b);
    friend istream operator>>(istream& in, Mat& a);
    friend ostream operator<<(ostream& cout, Mat& a);
    Mat();
    
private:
    int mat[2][3];
};
Mat::Mat()
{
    for (int i = 0; i < 2; i++)
        for (int j = 0; j < 3; j++)
            mat[i][j] = 0;
}

istream operator>>(istream& in, Mat& m)
{
    for (int i = 0; i < 2; i++)
        for (int j = 0; j < 3; j++)
        {
            cin >> m.mat[i][j];
        };
    return cin;
}
ostream operator<<(ostream& cout, Mat& m)
{
    for (int i = 0; i < 2; i++)
        for (int j = 0; j < 3; j++)
        {
            cout << m.mat[i][j];
        };
    return cout;
}
Mat operator+(Mat& a, Mat& b)
{
    Mat n;
    for (int i = 0; i < 2; i++)
        for (int j = 0; j < 3; j++)
        {
            n.mat[i][j] = a.mat[i][j] + b.mat[i][j];
        }
    return n;
}
int main()
{
    Mat a, b, c;
    cin >> a;
    cin >> b;
    cout << "a=" << a;
    cout << "b=" << b;
    c = a + b;
    cout << "c=" << c;
    
    system("pause");
    return 0;
}

  • 写回答

5条回答 默认 最新

  • Minuw 2023-06-02 14:14
    关注

    在重载输入输出运算符时,应该使用流对象的引用,而不是对象本身。因此,在重载输入和输出运算符时,应该将参数的类型改为istream&ostream&,并在返回值处返回相应的流对象。
    此外,在输出运算符中,应该以空格或换行符分隔每个数字,而不是将它们挤在一起输出。
    下面是修改后的代码:

    #include<iostream>
    using namespace std;
    
    class Mat
    {
    public:
        friend Mat operator+(Mat& a, Mat& b);
        friend istream& operator>>(istream& in, Mat& a);
        friend ostream& operator<<(ostream& cout, Mat& a);
    
        Mat();
    private:
        int mat[2][3];
    };
    
    Mat::Mat()
    {
        for (int i = 0; i < 2; i++)
            for (int j = 0; j < 3; j++)
                mat[i][j] = 0;
    }
    
    istream& operator>>(istream& in, Mat& m)
    {
        for (int i = 0; i < 2; i++)
            for (int j = 0; j < 3; j++)
            {
                in >> m.mat[i][j];
            };
        return in;
    }
    
    ostream& operator<<(ostream& cout, Mat& m)
    {
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 3; j++) {
                cout << m.mat[i][j] << " ";
            }
            cout << endl;
        }
        return cout;
    }
    
    Mat operator+(Mat& a, Mat& b)
    {
        Mat n;
        for (int i = 0; i < 2; i++)
            for (int j = 0; j < 3; j++)
            {
                n.mat[i][j] = a.mat[i][j] + b.mat[i][j];
            }
        return n;
    }
    
    int main()
    {
        Mat a, b, c;
        cin >> a >> b;
        cout << "a=" << endl << a;
        cout << "b=" << endl << b;
        c = a + b;
        cout << "c=" << endl << c;
    
        system("pause");
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 6月10日
  • 已采纳回答 6月2日
  • 创建了问题 6月2日

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。