C++ 学习笔记之运算符重载+案例

目录

一、C++ 运算符重载

二、定义一个成员函数或全局函数

 三、计算时间

1.计算时间差

2.时间加减

四、一个运算符重载实例


一、C++ 运算符重载

是一种特性,它允许程序员重新定义已有的运算符的行为,以适应自定义类型的操作。通过运算符重载,我们可以使用自定义类型的对象进行类似于内置类型的操作,使代码更加直观和易读。

以下是一些常见的 C++ 运算符重载示例:

  1. 算术运算符重载:

    • +:用于两个对象的相加操作。
    • -:用于两个对象的相减操作。
    • *:用于两个对象的相乘操作。
    • /:用于两个对象的相除操作。
  2. 关系运算符重载:

    • ==:用于判断两个对象是否相等。
    • !=:用于判断两个对象是否不相等。
    • <:用于判断一个对象是否小于另一个对象。
    • >:用于判断一个对象是否大于另一个对象。
    • <=:用于判断一个对象是否小于等于另一个对象。
    • >=:用于判断一个对象是否大于等于另一个对象。
  3. 赋值运算符重载:

    • =:用于将一个对象的值赋给另一个对象。
  4. 输入输出运算符重载:

    • <<:用于将对象的值输出到流中。
    • >>:用于从流中读取值并将其赋给对象。
  5. 自增自减运算符重载:

    • ++:用于使对象自增。
    • --:用于使对象自减。
  6. 下标运算符重载:

    • []:用于通过下标访问对象中的元素。

要重载一个运算符,需要在类中定义一个对应的成员函数或全局函数,并使用特殊的命名规则。运算符重载函数通常以关键字 operator 开头,然后是要重载的运算符符号。

例如,要重载加法运算符 +,可以

二、定义一个成员函数或全局函数

// 成员函数形式
class MyClass {
public:MyClass operator+(const MyClass& other) {// 定义加法操作的实现}
};// 全局函数形式
class MyClass {};MyClass operator+(const MyClass& obj1, const MyClass& obj2) {// 定义加法操作的实现
}

 三、计算时间

计算时间通常包括两个方面:时间差和时间加减。

1.计算时间差

计算时间差可以用于计算两个日期之间的天数、小时数、分钟数等。一种常见的方法是将日期转换为 Unix 时间戳,然后计算时间戳的差值。在 C++ 中,可以使用 <chrono> 头文件中的 system_clock::now() 函数获取当前时间的时间点,再通过 time_since_epoch() 函数获取时间点对应的时间戳。

例如,以下代码计算了两个时间点之间的时间差:

#include <iostream>
#include <chrono>int main() {std::chrono::system_clock::time_point start_time = std::chrono::system_clock::now();// 执行一些操作std::chrono::system_clock::time_point end_time = std::chrono::system_clock::now();std::chrono::duration<double> time_diff = end_time - start_time;std::cout << "Time difference: " << time_diff.count() << " seconds" << std::endl;return 0;
}

2.时间加减

在 C++ 中,可以使用 <chrono> 头文件中的 time_point 类型表示一个时间点,使用 duration 类型表示时间间隔。要进行时间加减,可以将一个时间点加上一个时间间隔,得到一个新的时间点。例如,以下代码将当前时间加上一小时:

#include <iostream>
#include <chrono>int main() {std::chrono::system_clock::time_point now = std::chrono::system_clock::now();std::chrono::hours an_hour(1);std::chrono::system_clock::time_point new_time = now + an_hour;std::cout << "New time: " << std::chrono::system_clock::to_time_t(new_time) << std::endl;return 0;
}

请注意,时间加减操作可能会受到夏令时等因素的影响,因此需要谨慎处理。此外,如果需要更高精度的计算,可以考虑使用第三方库如 Boost 或 Qt 中提供的日期时间类。

四、一个运算符重载实例

用于计算两个时间点之间的时间差:

#include <iostream>
#include <chrono>class Time {
public:Time(int year, int month, int day, int hour, int minute, int second) {std::tm time = {0, 0, 0, day, month - 1, year - 1900};std::time_t tt = std::mktime(&time);tt += hour * 3600 + minute * 60 + second;m_time_point = std::chrono::system_clock::from_time_t(tt);}// 运算符重载:计算时间差std::chrono::duration<double> operator-(const Time& other) const {return m_time_point - other.m_time_point;}private:std::chrono::system_clock::time_point m_time_point;
};int main() {Time t1(2022, 1, 1, 0, 0, 0);Time t2(2023, 1, 1, 0, 0, 0);std::chrono::duration<double> diff = t2 - t1;std::cout << "Time difference: " << diff.count() << " seconds" << std::endl;return 0;
}

在上面的代码中,我们定义了一个 Time 类来表示一个时间点。该类包含一个构造函数,用于将日期和时间转换为一个时间点;以及一个运算符重载函数 -,用于计算两个时间点之间的时间差。在主函数中,我们创建了两个时间点,并计算它们之间的时间差。最终输出结果为两个时间点之间相差的秒数。

请注意,上述代码中我们使用了 C++11 标准中新增的日期时间库 <chrono>,该库提供了高精度的时间计算功能,并可以方便地进行时间点和时间间隔的转换。

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

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

相关文章

电商新趋势:解析养号的必要性及海外云手机运用攻略

在电商领域&#xff0c;什么最为关键&#xff1f;答案无疑是流量&#xff01;然而&#xff0c;如何以较低成本获取大量流量成为了许多电商从业者头疼的问题。虽然直接投放广告是一种方式&#xff0c;但在内卷的情况下效果越来越难以令人满意&#xff0c;高昂的广告费用也原来越…

Python如何对csv文件进行操作

csv是Comma-Separated Values的缩写&#xff0c;是用文本文件形式储存的表格数据&#xff0c;比如如下的表格&#xff1a; 就可以存储为csv文件&#xff0c;文件内容是&#xff1a; No.,Name,Age,Score1,mayi,18,99 2,jack,21,89 3,tom,25,95 4,rain,19,80 假设上述csv文件保存…

10 款最适合阅读和注释 PDF 文件的工具

简介 PDF 或便携式文档格式是 Adob​​e 在 20 世纪 90 年代创建的一种文件类型&#xff0c;作为轻松创建和分发文档的解决方案。如今&#xff0c;PDF 在世界各地的教育、企业、政府甚至互联网等行业中得到广泛应用。PDF 具有广泛的功能&#xff0c;包括多页文档、注释、超链接…

文件管理小技巧:如何高效整理多种格式的图片,图片分类的方法

随着数字时代的到来&#xff0c;每天都会处理到大量的图片&#xff0c;从个人照片到工作相关的图像资料。如何高效地整理多种格式的图片&#xff0c;常常让人感到困扰。下面看下云炫文件管理器如何对图片分类的方法。 jpg图片、png图片、tiff图片未归类前的缩略图。 jpg图片、…

【已解决】RAR压缩文件可以转换为ZIP格式吗?

想把RAR压缩文件转换成ZIP格式文件&#xff0c;除了可以把RAR压缩包解压后&#xff0c;再重新压缩成ZIP格式&#xff0c;还可以利用WinRAR解压缩软件的“格式转换功能”来实现。不清楚的小伙伴&#xff0c;一起来看看如何操作吧。 首先&#xff0c;通过WinRAR解压缩软件打开RA…

【每日小bug】——mybatis-plus拼接sql空格报错,根据时间聚合查询

mybatis-plus拼接sql报错 复制报错sql语句到navicat,字段之间缺少空格&#xff0c;补上就可以了 聚合sql 根据时间 json接收JsonFormat(timezone "GMT8", pattern "yyyy-MM-dd")DateTimeFormat(pattern "yyyy-MM-dd")private Date startTim…

【前后端的那些事】前后端环境搭建+树形结构表格实现

文章目录 1. 前后端项目环境搭建2. table-tree2.1 后端准备2.2 前端准备 前言&#xff1a;最近写项目&#xff0c;发现了一些很有意思的功能&#xff0c;想写文章&#xff0c;录视频把这些内容记录下。但这些功能太零碎&#xff0c;如果为每个功能都单独搭建一个项目&#xff0…

(ros2)gazebo颜色设置

在gazebo当中不用再设置颜色了&#xff0c;因为完全可以使用urdf的设置 <robot name"base" xmlns:xacro"http://wiki.ros.org/wiki/xacro"><xacro:property name"PI" value"3.1415926"/><!--定义一个变量PI&#xff0…

vue前端开发自学,组件的生命周期函数介绍001

vue前端开发自学,组件的生命周期函数介绍001&#xff01;今天介绍一下&#xff0c;组件自身的生命周期函数。又叫做&#xff0c;钩子函数。可以借助于这些钩子函数&#xff0c;实现很多我们预想的效果。比如&#xff0c;在组件渲染 之前&#xff0c;就做一些特殊的操作等等。 …

sectigo通配符dv证书400元买一年送1月实际签发13个月

Sectigo就是众多颁发数字证书的CA认证机构之一&#xff0c;旗下的DV通配符SSL证书作为一种加密通信工具&#xff0c;广泛应用于保护网站数据的安全。其中&#xff0c;SectigoDV通配符SSL证书是一种受欢迎的产品&#xff0c;它不仅能够提供强大的加密功能&#xff0c;还可以提高…

firewalld防火墙命令行工具

firewall-cmd命令 &#xff08;1&#xff09;启动、停止、查看firewalld服务 在安装CentOS 7系统时&#xff0c;会自动安装firewalld 和图形化工具firewall-config.执行以下命令可 以启动 firewalld 并设置为开机自启动状态。 [rootllcgc ~]# systemctl start firewalld.serv…

SpringSecurity入门demo(一)集成与默认认证

一、集成与默认认证&#xff1a; 1、说明&#xff1a;在引入 Spring Security 项目之后&#xff0c;没有进行任何相关的配置或编码的情况下&#xff0c;Spring Security 有一个默认的运行状态&#xff0c;要求在经过 HTTP 基本认证后才能访问对应的 URL 资源&#xff0c;其默认…

1月自考本周末开考!自考考前注意事项及考试技巧

广东省2024年1月高等教育自学考试将于1月13日至14日举行。 注意&#xff1a; 考生应提前至少20分钟进入考场。 开考15分钟后&#xff0c;迟到考生不得进入考场参加当科考试。 2、自考考试必备物品 准考证&#xff1a;进入考场的有效证件&#xff0c;打印后妥善保存 身份证…

C#编程-实现多线程

实现多线程 多线程帮助同时执行各种操作。这为用户节省时间。多线程程序包括一个主线程和其他用户定义的线程以同时执行多个任务。 微处理器为执行的进程分配内存。每个进程占有内存中它们自己的地址空间。但是,所有在进程中的线程占有相同的地址空间。多线程允许在一个程序…

Linux:进程的通信

目录 进程间的通信 管道 1.概念 2.匿名管道 3.命名管道 4.匿名管道与命名管道的区别 5.总结管道的特点 共享内存 1.原理 2.共享内存的建立 3.代码 1.相关函数 2.总结 进程间的通信 1.进程间通信目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程…

软件测试|Beautiful Soup库详细使用指南

简介 Beautiful Soup是一款强大的Python库&#xff0c;广泛用于解析HTML和XML文档&#xff0c;从中提取数据并进行处理。它的灵活性和易用性使得数据抽取变得简单&#xff0c;本文将详细介绍Beautiful Soup库的基本用法和示例。 安装Beautiful Soup 首先&#xff0c;需要确保…

JavaEE学习笔记 2024-1-12 --Tomcat服务器、Servlet

JavaEE JavaEE是企业级开发 是综合性非常强的阶段  包含的知识点:JavaSE,MySQL,JDBC,WEB(HTML,CSS,JS,前端框架),Servlet,JSP,XML,AJAX等技术 1.服务器 JavaEE项目需要运行在服务器之上 WEB服务器就是WEB项目的容器,WEB项目的运行环境,将项目部署到服务器下,可以通过服务器…

Java面试之并发篇(二)

1、前言 本篇主要基于Java面试题之并发篇&#xff08;一&#xff09;继续梳理java中关于并发相关的高频面试题。本篇的面试题基于网络整理&#xff0c;和自己编辑。在不断的完善补充哦。 2、synchronized 的原理是什么? synchronized是 Java 内置的关键字&#xff0c;它提供…

软件测试|selenium 元素无法选择异常的原因及解决

简介 在进行 Web 自动化测试时&#xff0c;使用 Selenium 可能会遇到各种异常情况。其中之一就是 ElementNotSelectableException 异常&#xff0c;该异常通常意味着在尝试选择一个不可选元素时出现了问题。本文将详细介绍这个异常的原因、可能的解决方法&#xff0c;并提供示…

韩国LG集团在 CES2024 消费电子展上发布的的无线透明OLED屏幕

国际消费类电子产品展览会&#xff08;International Consumer Electronics Show&#xff0c;简称CES&#xff09;&#xff0c;由美国电子消费品制造商协会&#xff08;简称CTA&#xff09;主办&#xff0c;旨在促进尖端电子技术和现代生活的紧密结合。该展始于1967年&#xff…