c++运算符重载

运算符重载

同类:对象1 运算符 对象2——c1 + c2

调用运算符重载方法计算

基本使用

#include <iostream>class ComplexNumber {
private:double real;double imaginary;public:ComplexNumber(double r, double i) : real(r), imaginary(i) {}// 运算符重载,实现复数对象的相加操作ComplexNumber operator+(const ComplexNumber& other) {double newReal = real + other.real;double newImaginary = imaginary + other.imaginary;return ComplexNumber(newReal, newImaginary);}// 输出复数对象的内容void display() {std::cout << real << " + " << imaginary << "i" << std::endl;}
};int main() {ComplexNumber num1(3.0, 2.0);ComplexNumber num2(1.5, 4.5);ComplexNumber sum = num1 + num2; // 使用运算符重载执行相加操作std::cout << "Sum of complex numbers: ";sum.display();return 0;
}

流式输出的本质

运算符重载

<<的运算符重载函数

类似于Java类的tostring方法

ostream& operator<<(ostream& out,Test &t){out<<t.v<<endl;return out;
}

可以被重载的运算符

在C++中,可以通过运算符重载来改变内置数据类型或自定义类对象之间的操作行为。以下是一些可以被重载的运算符:

  1. 算术运算符:可以重载加法、减法、乘法、除法等算术运算符。

    • +:重载为对象相加。
    • -:重载为对象相减。
    • *:重载为对象相乘。
    • /:重载为对象相除。
    • %:重载为对象相模除。
  2. 关系运算符:可以重载关系运算符,如等于、不等于、大于、小于等。

    • ==:重载为对象相等比较。
    • !=:重载为对象不等比较。
    • <:重载为对象小于比较。
    • >:重载为对象大于比较。
    • <=:重载为对象小于等于比较。
    • >=:重载为对象大于等于比较。
  3. 赋值运算符:可以重载赋值运算符(=),使其能够用于自定义类对象。

  4. 自增和自减运算符:可以重载前缀(++--)和后缀(++--)自增和自减运算符。

  5. 位运算符:可以重载按位与(&)、按位或(|)、按位异或(^)等位运算符。

  6. 逻辑运算符:可以重载逻辑与(&&)、逻辑或(||)等逻辑运算符。

  7. 下标运算符:可以重载方括号运算符[],以便类对象可以像数组一样使用。

  8. 函数调用运算符:可以重载圆括号运算符(),使对象可以像函数一样被调用。

  9. 成员访问运算符:可以重载成员访问运算符(->)和成员选择运算符(.),以改变类对象的成员访问行为。

  10. 类型转换运算符:可以重载类型转换运算符,例如将对象转换为其他类型。

  11. 流插入和流提取运算符:可以重载 <<>> 运算符,以支持自定义对象的输入和输出。

  12. 新的和删除的运算符:可以重载 newdelete 运算符,以自定义内存管理行为。

示例项目:

计算 平面坐标两点间的距离。
1),要求使用操作符重载的方法 (重载 “-” 算术运算符)

#include <iostream>
#include <cmath> // 包含 sqrt 函数的头文件class CPerson {
private:double x;double y;public:CPerson(double xVal, double yVal) : x(xVal), y(yVal) {}// 计算与另一个对象的距离double operator-(const CPerson& other) const {return sqrt((this->x - other.x) * (this->x - other.x) + (this->y - other.y) * (this->y - other.y));}
};int main() {CPerson person1(1.0, 2.0);CPerson person2(4.0, 6.0);double distance = person1 - person2; // 使用重载的减法运算符计算距离std::cout << "Distance between persons: " << distance << std::endl;return 0;
}

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

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

相关文章

二叉树顺序结构及实现

&#x1f449;二叉树顺序结构及实现 1.二叉树的顺序结构2.堆的概念及结构3.堆的实现3.1堆向下调整算法3.2堆向上调整算法 4.堆的创建4.1堆创建方法14.1.1构建堆结构体4.1.2堆的初始化4.1.3堆数据添加向上调整4.1.4主函数内容 4.2堆的创建方法24.2.1堆数据添加向下调整 4.3堆数据…

Oracle两个日期都存在返回最小/最大的,如果只存在一个就返回存在的日期

Oracle函数 Oracle两个字段日期都存在返回最小的&#xff0c;如果只存在一个就返回存在的日期. 函数说明LEAST(value1, value2, …)最小值GREATEST(value1, value2, …)最大值COALESCE(value1, value2, …)返回第一个不是空值的参数

反转链表:从创建到反转,讲清链表

链表的节点数据结构&#xff1a; package cn.yaunsine.domain;/*** 链表节点数据结构*/ public class ListNode {/*** 元素值*/public int val;/*** 指向下一个节点的指针*/public ListNode next;public ListNode (int val) {this.val val;this.next null;} }创建链表&#…

CAN总线

can总线看起来和485电路很相似&#xff0c;485出来是AB 线&#xff0c;can出来 CAN_HIGH CAN_LOW 2.CAN总线特点 多主控制不像iic 只能一个主机&#xff0c;也没有地址的概念

ModuleNotFoundError: No module named ‘transformers.modeling_bert‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【Linux旅行记】探究操作系统是如何进行管理的!

文章目录 什么是操作系统&#xff1f;操作系统概念操作系统的目的底层硬件驱动程序操作系统理解系统调用接口 操作系统是如何进行管理的&#xff1f;什么是管理&#xff1f;操作系统是如何管理硬件信息呢&#xff1f; &#x1f340;小结&#x1f340; &#x1f389;博客主页&am…

数据结构——线性表之顺序表

目录 一.线性表 二.顺序表实现 2.1 概念及结构 2.2 动态顺序表 2.2.1 初始化与销毁函数 2.2.2 打印函数 2.2.3 尾插函数 2.2.4 尾删函数 2.2.5 扩容函数 2.2.6 头插函数 2.2.7 头删函数 2.2.8 任意位置插入函数 2.2.9 查找函数 2.2.10 任意位置删除函数 2.2.11 修…

Git远程分支项目强制覆盖本地项目

此操作会将本地项目代码与Git远程仓库代码保持完全一致&#xff0c;可能会导致自己本地修改的代码被覆盖&#xff0c;覆盖后找都没法找那种。所以操作前请确认&#xff0c;本地所有修改文件是否不重要或者自己以备份。 操作主要分几个步骤完成。 第一步&#xff1a;获取远程所…

基于Java体育馆管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

RFID车辆自动化称重管理

应用背景 随着物流和交通管理的发展&#xff0c;车辆称重成为了不可忽视的环节&#xff0c;传统的车辆称重管理方式存在诸多问题&#xff0c;如人工操作繁琐、数据准确性低、容易出现作弊等&#xff0c;为了提高车辆称重管理的效率和准确性&#xff0c;RFID技术被引入到车辆称…

Java八股文 基础故障处理工具的指令【jps,jstate...】

文章目录 一、 jps指令常见指令以及作用 二、jstat常见指令以及作用 三、jinfo常见指令以及作用 四、jmap常见指令以及作用 五、jhat六、jstack常见指令以及作用 一、 jps指令 jps指令能够列出正在运行的虚拟机进程&#xff0c;及这些进程的本地虚拟机唯一 ID&#xff08;LVMI…

使用Langchain+GPT+向量数据库chromadb 来创建文档对话机器人

使用LangchainGPT向量数据库chromadb 来创建文档对话机器人 一.效果图如下&#xff1a; 二.安装包 pip install langchainpip install chromadbpip install unstructuredpip install jieba三.代码如下 #!/usr/bin/python # -*- coding: UTF-8 -*-import os # 导入os模块&…

为什么2022年秋招嵌入式开发岗位薪资大涨?

今天看到一个网友讨论的问题&#xff0c;其实这个问题也很简答。从嵌入式本身优势来说&#xff0c;首先是因为该行业人才人才需求大&#xff0c;据权威统计机构统计在所有软件开发类人才的需求中&#xff0c;对嵌入式工程师的需求达到全部需求量的60%~80%&#xff0c;并且每年以…

Docker 编译 Go 项目

Docker 编译 Go项目 背景步骤1. 构建一个基础镜像2. 在基础镜像上构建一个临时镜像编译3. 拷贝出编译的程序 背景 Go项目中用到cgo特性,生产环境部署时有的机器因glibc版本过低无法运行 version GLIBC_2.32 not found, required by bin/main 因此需要一个自动化部署的方法&…

数据结构(C语言)——双链表

有了单链表的编写经验&#xff0c;双链表变得格外容易。点击看前一篇-单链表 下面是代码&#xff1a; #include<stdio.h> #include<stdlib.h> #define E int typedef struct node {E element;struct node* pre;struct node* next; }node; void initialise(node* h…

JavaScript中的`async`和`await`关键字的作用

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ async关键字⭐ await 关键字3. 错误处理 ⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对We…

selenium中ActionChains方法详细讲解

前言 本文将介绍Selenium中的ActionChains类及其使用方法&#xff0c;帮助您模拟用户在网页上的鼠标和键盘操作。了解ActionChains的常用方法和示例代码&#xff0c;可轻松实现移动鼠标、点击元素、拖拽元素等操作。通过本文的学习&#xff0c;您能更好地应用ActionChains解决自…

nginx中sent_timeout属性使用注意事项

send_timeout使用注意事项 send_timeout:指客户端向服务器发送请求并且等待服务器返回数据的时间&#xff0c;超过这个时间链接就断开。如果咱们返回的数据复杂&#xff0c;很耗时&#xff0c;就将该值设置大些。注意该时间指准备过程&#xff0c;不是传输过程&#xff08;下载…

Python基础指令(上)

Python基础指令上 常量和表达式变量和类型1. 什么是变量2. 变量的语法2.1 定义变量2.2 使用变量 3. 变量的类型4. 为什么要有这么多类型5. 动态类型特性 注释输入输出1. 程序与用户的交互2. 通过控制台输出3. 通过控制台输入 运算符1. 算术运算符2. 关系运算符3. 逻辑运算符4. …

Linux文件出现“M-oM-;M-?” ^M 等情况

1、当在编辑linux系统的文件时&#xff0c;会出现如下情况&#xff1a; 解决方法&#xff1a;单个文件可以使用vim 进行修改&#xff0c;shift :&#xff0c; 然后 set nobomb 2、当文件出现每一行末尾^M的情况&#xff1a; 解决方法&#xff1a;使用vi的替换功能。启动vi&am…