• 【C++语法讲解】 | 运算符重构 | 三种运算符的重构方式 |代码演示


    1,简述

    通常情况下,我们会创建一些简单的数据结构以应对日常的算法使用,为了方便运算符的使用,我们要进行运算符的相关学习,运算符存在 + , - , * , % , / 这些大类,我们在重构的时候一般也只重构这些运算符,为了方便运算而存在的,下面我们首先讲解一下结构体的定义,因为运算符的重构一般情况下是在结构体中存在的,下面我们来了解一下大概的实现流程。

    2,结构体的定义
    1,结构体的声明

    结构体的声明是有固定的结构的,所在位置一般在主函数的外面

    struct 	Point {
        int x , y ;
        // 下面的数据类型是定义的结构体的数据类型
    };
    
    
    // 当然也可以一开始的时候就进行初始化 如下 : 
    struct Point{
        int x , y ;
    }Node[N] ; 
    //数组甚至还可以是单个变量
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    2,结构体的申请

    结构体的申请一般来说是比较简单的,和一般的数据结构一样,使用的是 “struct + 数据结构 + 变量名称” 的办法 。

    struct Point Node ; 
    
    • 1
    ##### 3,运算符的重载
    
    • 1

    介绍完结构体之后我们应该再想一想,运算符怎么进行重构?分为几种方式呢 ?

    大致上我们可以把他们分成两种情况 : 在结构题中进行重构,在结构体外进行重构。首先是在结构体中重构是我比较喜欢的一种重构方式,这样的数据结构被打包到一个结构体中是更加的稳定!!!(个人认为),下面我们来学习一下这种数据结构。

    3.1 ,在结构体中重构

    1. friend函数

    使用 friend 函数 进行重构的规则如下 :

    struct Point{
        int x ,y ;
        friend bool operator < (Point a , Point b){
    		/*
    		函数主体 : 
            if(x.a==y.a)return a.y < b.x ; 
                return a.x < b.x ; 
            */
        }
    }
    
    // 主要的分支 : friend 变量类型 operator (运算符) ( 重载结构 a , 重载结构 b ){} 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2,自身重构

    使用自身重构的表现就是把上面的朋友变量的第一个转化成为自身的变量名称 ;

    主要的结构应该是 : 变量类型 operator 运算符 ( const Point & a ) const {

    }

    struct Point {
        int x , y ;
        bool operator < (const Point &a)const{
            /*	
           		 下面的函数为实现的主体内容 ; 
            */
        } 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    3.2 在结构体外进行重构

    只有一种办法,实际上我觉得就像简单的函数的设置一样,直接上代码

    Point operator * (const Point &a , const Point &b ){}
    
    • 1

    这大概就是重载运算符的全部内容了,简单移动,下面我们使用这三种方法对一种数据结构进行重构总结一下,最后实现一个总程序代码供大家学习借鉴

    #include 
    using namespace std ;
    struct Point{
    	int x , y ;
    	friend Point operator+ (Point a , Point b){
    		Point c ; 
    		c.x=a.x+b.x;
    		c.y=a.y+b.y;
    		return c ;
    	}
    	Point operator- (const Point &a)const{
    		Point c ;
    		c.x=x-a.x;
    		c.y=y-a.y;
    		return c ; 
    	}
    };
    
    Point operator * ( const Point &a , const Point &b ){
    		Point c ;
    		c.x=a.x*b.x;
    		c.y=a.y*b.y;
    		return c ; 
    }
    
    int main () {
    
    	return 0 ; 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    LeetCode【4】寻找两个正序数组中位数
    Android音视频开发:MediaCodec解码视频,得到YUV值,一帧一帧加载到SD卡中保存
    Origin | 条形图地图绘制及经纬度的拾取
    【Web】在前端中CSS的语法
    logging 彩色日志 封装类(直接使用即可)
    Springboot毕设项目公司资产23sh6(java+VUE+Mybatis+Maven+Mysql)
    tinymce输入框怎么限制只输入空格或者回车时不能提交
    学习JAVA的第十二天(基础)
    剑指 Offer 32 - I. 从上到下打印二叉树(java解题)
    centos搭建http服务器
  • 原文地址:https://blog.csdn.net/wen030803/article/details/134224991