栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++矩阵类的重载符号‘+‘,输入与输出

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++矩阵类的重载符号‘+‘,输入与输出

题目概述:

    有两个均为3行3列的矩阵ml和m2,编写程序实现矩阵类Matrix,并重载运算符“+”、“>>”和“<<”,使之能用于矩阵m1和m2相加、输入和输出。

完整代码:

#include
#include
#include
using namespace std;

class Matrix
{
public:
	int x = 0, y = 0, num[3][3] = {};
	Matrix(){};  // 初始化构造函数
    Matrix(int hangx, int liey):x(hangx),y(liey){};
    void input()  //对应赋值
    {
    	for(int i = 0; i < x; i++)
        {
            for(int j = 0; j < y; j++)
            {
                num[i][j] = rand() % 9 + 1;
            }
        }
	}
    void show()
    {
        for(int i = 0; i < x; i++)
        {
            for(int j = 0; j < y; j++)
            {
                cout << num[i][j] << " ";
            }
            cout << endl;
        } //以矩阵形式输出
    }
    friend istream & operator>>(istream &in, Matrix &m);
    friend ostream & operator<<(ostream &out, const Matrix &m);
    friend Matrix & operator+(const Matrix& m1, const Matrix& m2); //声明
    
};
istream& operator>>(istream &in, Matrix &m) //输入非常量,Matrix前不加const
{
    in >> m.x >> m.y; //输入矩阵有几行几列
    m.input();
	return in;
}
ostream& operator<<(ostream &out, const Matrix &m)
{
    for(int i = 0; i < m.x; i++)
    {
        for(int j = 0; j < m.y; j++)
        {
            out << m.num[i][j] << " ";
        }
        out << endl;
    }
    return out;
}
//重载输入输出流的格式基本上框架很固定
Matrix& operator+(const Matrix& m1, const Matrix& m2)
{
	int size = m1.x;
	static Matrix m3(m1);
	for(int i = 0; i < size; i++)
	{
		for(int j = 0; j < size; j++)
		{
			m3.num[i][j] += m2.num[i][j];
		}
	} //对应相加,放到m3
	return m3;
}

int main()
{
    srand(int(time(0))); //int型随机种子
    Matrix a, b, c;
    cin >> a;      //测试>>重载
    cin >> b;
    c = a + b;      //测试+重载
    cout << "matrixa:" << endl << a << endl << "matrixb:" << endl << b << endl;
    cout << "matrixc:" << endl << c;   //测试<<重载
    
}

注释理解:

1.重载运算符'+'目的就是能够目的是令人看起来舒适,1+1=2,那矩阵A+B=C也应该能够直接用A+B得到,让人理解上与输入上一致。

2.重载运算符'>>','<<'的目的也是令人看起来舒适的操作,让输入输出符号后面能够直接跟上我想要输入与输出的矩阵的内容。其实就是重载头文件中iostream里输入istream和输出ostream流,我看作是重载一个新的该符号的函数定义,使得输入输出流符号'>>','<<' 后能识别矩阵类,从而直接在符号后加上矩阵类进行操作运算。

输出结果示例:

 初学,粗浅理解,欢迎指正!一起努力!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001860.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号