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

news2024/11/28 18:45:09

文章目录

          • 1,简述
          • 2,结构体的定义
            • 1,结构体的声明
            • 2,结构体的申请
          • 3.1 ,在结构体中重构
          • 3.2 在结构体外进行重构

1,简述

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

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

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

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


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

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

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

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

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

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 ){} 

2,自身重构

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

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

}

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

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

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

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

#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 ; 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1172388.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

layui form 中input输入框长度的统一设置

Layui.form中使用class"layui-input-inline"就可轻松将元素都放到一行&#xff0c;但如果元素过多&#xff0c;就会自动换行。那就需要手动设置input框的长度。 像这种情况&#xff1a; 其实只需要添加css样式就可修改了 .layui-form-item .layui-input-inline {wid…

海康Visionmaster通讯管理:通讯管理的心跳管理功能 的使用方法

当外部设备与视觉保持连接过程中&#xff0c;由于各种不可控的原因&#xff08;例如网线被意外拔 出&#xff0c;网口松动&#xff0c;视觉程序意外退出&#xff09;&#xff0c;如何让外部设备的程序可以知道&#xff1a;与视觉的通讯已 经中断。 可以通过通讯管理模块中的心跳…

802.11AX基础---走进HE WLAN

1、WiFi 6 是什么&#xff1f; WiFi 6是IEEE802.11ax的简称&#xff0c;也就是第六代WiFi的标准&#xff1b;它在继承前几代WiFi技术的前提下&#xff0c;不仅对速率进行优化&#xff0c;更着重于对 效率 的提升。 2、WiFi 6 为什么快&#xff1f; WiFi 6 理论速率计算公式&a…

webgoat靶场攻关

A&#xff08;5&#xff09; Broken Access Control Insecure Direct Object References 直接对象引用 直接对象引用是指应用程序使用客户端提供的输入来访问数据和对象。 例子 使用 GET 方法的直接对象引用示例可能如下所示 https://some.company.tld/dor?id12345 https…

css进阶知识点速览

0前言 零基础部分的博客 1选择器进阶 1.1后代选择器 作用&#xff1a;根据html标签的嵌套关系&#xff0c;选择父元素后代中满足条件的元素 选择器语法&#xff1a;选择器1 选择器2 {css} 结果&#xff1a; 在选择器1所找到标签的后代中 注意&#xff1a; 后代包括&#xf…

论文浅尝 | ChatKBQA:基于微调大语言模型的知识图谱问答框架

第一作者&#xff1a;罗浩然&#xff0c;北京邮电大学博士研究生&#xff0c;研究方向为知识图谱与大语言模型协同推理 OpenKG地址&#xff1a;http://openkg.cn/tool/bupt-chatkbqa GitHub地址&#xff1a;https://github.com/LHRLAB/ChatKBQA 论文链接&#xff1a;https://ar…

【std | C++】使用C++返回当前时间的年月日时分秒格式

#include <chrono> #include <ctime> #include <iomanip> #include <iostream> #include <thread>std::string getCurrentDataTimeString() {auto now = std::chrono::system_clock

go语言 | grpc原理介绍(三)

了解 gRPC 通信模式中的消息流 gRPC 支持四种通信模式&#xff0c;分别是简单 RPC、服务端流式 RPC、客户端流式 RPC 和双向流式 RPC。 简单 RPC 在gRPC中&#xff0c;一个简单的RPC调用遵循请求-响应模型&#xff0c;通常涉及以下几个关键步骤和组件&#xff1a; 请求头&a…

【QT】QFileInfo文件信息读取

基于上节&#xff1a;【QT】文件读写-CSDN博客 //文件信息类QFileInfo info(filePath);qDebug() << "后缀名:" << info.suffix() << "大小:"<< info.size()<< "文件名:" << info.fileName() << "…

消息中间件-RabbitMQ介绍

一、基础知识 1. 什么是RabbitMQ RabbitMQ是2007年发布&#xff0c;是一个在AMQP(高级消息队列协议)基础上完成的&#xff0c;简称MQ全称为Message Queue, 消息队列&#xff08;MQ&#xff09;是一种应用程序对应用程序的通信方法&#xff0c;由Erlang&#xff08;专门针对于大…

Git 内容学习

一、Git 的理解 Git是一个分布式版本控制系统&#xff08;Distributed Version Control System&#xff0c;简称 DVCS&#xff09;&#xff0c;用于对项目源代码进行管理和跟踪变更。分为两种类型的仓库&#xff1a;本地仓库和远程仓库。 二、Git 的工作流程 详解如下&#x…

【大学英语视听说上】压头韵收集 + 自然环境口语问答 + 口语考试练习

压头韵&#xff1a; 自然环境口语问答 Q1: Do you like wildlife? Why? Yes, I like wildlife because it represents the rich biodiversity of our planet. Wildlife plays crucial roles in ecosystem health and resilience, providing essential services like pollina…

【LeetCode刷题-栈与队列】--232.用栈实现队列

232.用栈实现队列 class MyQueue {Deque<Integer> inStack;Deque<Integer> outStack;public MyQueue() {inStack new ArrayDeque<Integer>();outStack new ArrayDeque<Integer>();}public void push(int x) {inStack.push(x);}public int pop() {if(…

Python基础入门例程36-NP36 谁的数字大(运算符)

最近的博文&#xff1a; Python基础入门例程35-NP35 朋友的年龄是否相等&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程34-NP34 除法与取模运算&#xff08;运算符&#xff09;-CSDN博客 Python基础入门例程33-NP33 乘法与幂运算&#xff08;运算符&#xff0…

【软考中级】软件设计师-下午题

下午题 试题一 黑洞&#xff1a;加工有输入无输出 白洞(奇迹)&#xff1a;加工有输出无输入 灰洞&#xff1a;数据流输入的加工不足以产生输出 结构化语言&#xff1a; IF *** THEN ELSE IF *** THEN ******* END IF END IF 数据流的父子图平衡&#xff0c;如果父子图平衡就不…

力扣每日一题100:相同的树

题目描述&#xff1a; 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&…

网络编程套接字(2)——简单的TCP网络程序

文章目录 一.简单的TCP网络程序1.服务端创建套接字2.服务端绑定3.服务端监听4.服务端获取连接5.服务端处理请求6.客户端创建套接字7.客户端连接服务器8.客户端发起请求9.服务器测试10.单执行流服务器的弊端 二.多进程版的TCP网络程序1.捕捉SIGCHLD信号2.让孙子进程提供服务 三.…

树结构及其算法-二叉运算树

目录 树结构及其算法-二叉运算树 C代码 树结构及其算法-二叉运算树 二叉树的应用实际上相当广泛&#xff0c;例如表达式之间的转换。可以把中序表达式按运算符优先级的顺序建成一棵二叉运算树&#xff08;Binary Expression Tree&#xff0c;或称为二叉表达式树&#xff09;…

请求地址‘/operlog‘,发生未知异常

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是全栈工…

EtherCAT主站读取从站EEPROM抓包分析

0 工具准备 1.EtherCAT主站 2.EtherCAT从站&#xff08;本文使用步进电机驱动器&#xff09; 3.Wireshark1 抓包分析 1.1 报文总览 本文让主站去读取从站1字地址为0的EEPROM数据内容&#xff0c;主站读取从站EEPROM数据内容使用Wireshark抓包如下&#xff1a; 1.2 EEPROM读…