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

文章目录

1,简述

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

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

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

cpp 复制代码
struct 	Point {
    int x , y ;
    // 下面的数据类型是定义的结构体的数据类型
};


// 当然也可以一开始的时候就进行初始化 如下 : 
struct Point{
    int x , y ;
}Node[N] ; 
//数组甚至还可以是单个变量
2,结构体的申请

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

cpp 复制代码
struct Point Node ; 
复制代码
##### 3,运算符的重载

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

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

3.1 ,在结构体中重构

1. friend函数

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

cpp 复制代码
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 ){} 

2,自身重构

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

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

}

cpp 复制代码
struct Point {
    int x , y ;
    bool operator < (const Point &a)const{
        /*	
       		 下面的函数为实现的主体内容 ; 
        */
    } 
}
3.2 在结构体外进行重构

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

cpp 复制代码
Point operator * (const Point &a , const Point &b ){}

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

cpp 复制代码
#include <iostream>
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 小时前
关于rust的crates.io
开发语言·后端·rust
Lionel_SSL1 小时前
《深入理解Java虚拟机》第三章读书笔记:垃圾回收机制与内存管理
java·开发语言·jvm
睡不醒的kun2 小时前
leetcode算法刷题的第三十二天
数据结构·c++·算法·leetcode·职场和发展·贪心算法·动态规划
技术猿188702783512 小时前
PHP 与 WebAssembly 的 “天然隔阂”
开发语言·php·wasm
薄荷撞~可乐2 小时前
C#Task(Api)应用
开发语言·c#
乔宕一4 小时前
stm32 链接脚本没有 .gcc_except_table 段也能支持 C++ 异常
c++·stm32·嵌入式硬件
SuperCandyXu4 小时前
P3205 [HNOI2010] 合唱队-普及+/提高
c++·算法·洛谷
another heaven4 小时前
【Qt VS2022调试时无法查看QString等Qt变量信息】解决方法
开发语言·qt
A黄俊辉A4 小时前
axios+ts封装
开发语言·前端·javascript
_君落羽_4 小时前
ARM寄存器以及异常处理
c++