当前位置:主页 > c/c++教程 > C++重载矩阵运算符

C++实现重载矩阵的部分运算符

发布:2023-03-06 20:00:01 59


给网友们整理相关的编程文章,网友邱博延根据主题投稿了本篇教程内容,涉及到C++、重载矩阵运算符、C++、重载运算符、C++、矩阵运算符、C++重载矩阵运算符相关内容,已被361网友关注,下面的电子资料对本篇知识点有更加详尽的解释。

C++重载矩阵运算符

前言

博主本人为C++菜鸟一只,本篇博客也是第一次写,主要目的用于自己mark,如有错误欢迎指出

本博客代码为我做C++实验时的代码,由于自己是菜鸟,所以代码内容掌握的也不是很熟。

在此记下此篇,待到日后查看也是属于自己青春的一部分吧。

正文

整个工程分为头文件,source,以及main构成。

工程的目的为实现对矩阵运算符‘+’,‘-’,‘*’,‘==’,‘!=’,‘<<’和‘>>’的重载,并在main中测试其情况。

以下为头文件

//Matrix.h
#ifndef MATRIX_H
#define MATRIX_H

#include 
using namespace std;
class Matrix
{
public:
    Matrix operator + (Matrix&a);//重载 +
    Matrix operator - (Matrix&b);//重载 -
    Matrix operator * (Matrix&c);//重载 *
    bool operator == (Matrix&d);//重载 ==
    bool operator != (Matrix&e);//重载 !=
    friend ostream& operator << (ostream&,Matrix&);//重载 <<
    friend istream& operator>>(istream&,Matrix&);//重载 >>
    void setMatrix(int a, int b);//设置矩阵行列
private:
    int row;
    int col;
    int matrix[200][200];
};
#endif

关于 void setMatrix(int a, int b); 其实这个函数可以不设置,利用构造函数可以完成该功能,甚至更完美。但我有些小懒,就不想去修改了,如果出事的话…QAQ还是希望不会出事吧。

还有就是,矩阵我设置成了200*200,其实可以利用new调用动态内存来更好的实现,但由于我太菜,不想去用二重指针,故放弃了这个方案。

以下为cpp文件

//Matrix.cpp
#include 
#include "Matrix.h"

using namespace std;

void Matrix::setMatrix(int a, int b)//构造函数可以取代这个
{
    row=a;
    col=b;
}

Matrix Matrix::operator + (Matrix &a)//重载 +
{
    if (row!=a.row||col!=a.col)
    {
        throw"这两个矩阵不可相加";
    }

抛出异常,之所以使用这个,是因为没法cout<<“错误”;之后return 0强制退出,因为返回类型是矩阵,我当时没有尝试利用exit()函数…(果然我太菜了QAQ)

    else//矩阵元素相加
    {
        Matrix sum;//创建新矩阵,为接下来返回矩阵用
        sum.row=row;
        sum.col=col;
        for(int i=0; i

计算规则需要自己确定(代几应该都学过),如这个是加法,规则如上:sum矩阵的各位置元素分别为’+‘前矩阵和’+'后矩阵对应位置元素的和。

Matrix Matrix::operator-(Matrix &b)//重载 -
{
    if (row!=b.row||col!=b.col)
    {
        throw"这两个矩阵不可相减!";//抛出异常
    }
    else//矩阵元素相减
    {
        Matrix reduce;
        reduce.row=row;
        reduce.col=col;
        for(int i=0; i

减法和加法类似,可以模仿着加法来,注意下计算规则就行

Matrix Matrix::operator*(Matrix&c)
{
    if (col!=c.row)
    {
        throw"这两个矩阵不可相乘!";
    }
    else//矩阵元素相乘
    {
        Matrix multi;
        multi.row=row;//新矩阵的行等于第一个矩阵的行
        multi.col=c.col;//新矩阵的列等于第二关矩阵的列
        for(int i=0; i

关于矩阵乘法的规则可以拿张纸先演算一下,这样方便自己理解。

bool Matrix::operator == (Matrix&d)//判断矩阵是否相等
{
    if (row!=d.row||col!=d.col)//先判断行列是否相等
    {
        return false;
    }
    for(int i=0; i>(istream&in, Matrix &mat)//重载输入矩阵
{
    for (int i = 0; i < mat.row; i++)
    {
        for (int j = 0; j < mat.col; j++)
        {
            in >> mat.matrix[i][j];//由行到列一次输入元素
        }
    }
    return in;//返回输入流
}

以下为main.cpp,主要用于测试。

//main.cpp
#include 
#include "Matrix.h"

using namespace std;

int main()
{
    int row, col;
    Matrix A;
    cout<<"Please input rows cols:\n";
    cin>>row>>col;//输入行列
    A.setMatrix(row,col);//为矩阵设置行列
    cout<<"Please input your matrix elements:\n";
    cin>>A;//输入元素,因为已经重载了>>,所以可以直接在>>后面加矩阵类A
    cout<<"以下是你创建的第一个矩阵!\n";
    cout<>row>>col;
    B.setMatrix(row,col);
    cout<<"Please input your matrix elements:\n";
    cin>>B;
    cout<<"以下是你创建的第二个矩阵!\n";
    cout<

运行结果

矩阵相乘:

矩阵相加减:

以上就是C++实现重载矩阵的部分运算符的详细内容,更多关于C++重载矩阵运算符的资料请关注码农之家其它相关文章!


参考资料

相关文章

  • C++递归算法处理岛屿问题详解

    发布:2023-03-03

    这篇文章主要介绍了用递归算法解决岛屿问题的流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧


  • 《C++ Primer》隐式类类型转换学习整理

    发布:2023-01-18

    为网友们分享了关于C++的教程,在本篇文章里小编给大家整理的是关于《C++ Primer》隐式类类型转换学习笔记内容,需要的朋友们参考下。


  • C++实现优酷土豆去视频广告的方法

    发布:2022-09-06

    给网友们整理关于C++的教程,这篇文章主要介绍了C++实现优酷土豆去视频广告的方法,实例分析了C++实现屏蔽功能的相关技巧,需要的朋友可以参考下


  • Inline Hook(ring3)的简单C++实现方法

    发布:2022-09-23

    给大家整理了关于C++的教程,这篇文章主要介绍了Inline Hook(ring3)的简单C++实现方法,需要的朋友可以参考下


  • C C++ 题解LeetCode1417重新格式化字符串

    发布:2023-03-05

    这篇文章主要为大家介绍了C C++ 题解LeetCode1417重新格式化字符串,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪


  • C++ 基本数据类型中int、long等整数类型取值范围及原理分析

    发布:2023-03-10

    这篇文章主要介绍了C++ 基本数据类型中int、long等整数类型取值范围及原理分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教


  • 解析c++中参数对象与局部对象的析构顺序的详解

    发布:2022-04-15

    本篇文章是对c++中参数对象与局部对象的析构顺序进行了详细的分析介绍,需要的朋友参考下


  • Lua和C/C++互相调用实例分析

    发布:2022-06-23

    给网友们整理关于C++的教程,今天小编就为大家分享一篇关于Lua和C/C++互相调用实例分析,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧


网友讨论