10.3运算符重载

news2025/1/11 10:54:50
#include <iostream>

using namespace std;

//定义一个复数类
class Complex
{
private:
    int real;   //实部
    int vir;    //虚部
public:
    Complex(){}
    Complex(int r, int v):real(r),vir(v){}

    void show(){
        if(vir > 0){
            cout<<real<<" + "<<vir<<"i"<<endl;
        }else{
            cout<<real<<vir<<"i"<<endl;
        }
    }

    const Complex operator-(const Complex &R)const {
        Complex c;

        c.real = real - R.real;
        c.vir = vir - R.vir;

        return c;
    }

    //成员函数版实现关系运算符重载
    bool operator>(const Complex &R)const {
        return real>R.real&&vir>R.vir;
    }

    int & operator[](const int index) {
        if(1 == index){
            return vir;
        }else if(0 == index){
            return real;
        }else{
            cout<<"段错误"<<endl;
        }
    }

    Complex &operator+=(const Complex &R) {

        real += R.real;
        vir += R.vir;

        return *this;   //返回自身的引用
    }

    //重载负号运算符
    Complex operator-()const {
        Complex c;

        c.real = -real;
        c.vir = -vir;

        return c;
    }

    friend const Complex operator+(const Complex &L,const Complex &R);
};

//全局函数版实现加号运算符重载:实部加实部,虚部加虚部
const Complex operator+(const Complex &L,const Complex &R){
    //定义一个临时空间
    Complex c;

    c.real = L.real + R.real;
    c.vir = L.vir + R.vir;

    return c;
}

int main()
{
    Complex c1(5,7);
    c1.show();

    Complex c2(4,-3);
    c2.show();

    Complex c3 = c1+c2;
    c3.show();

    Complex c4 = c1-c2;
    c4.show();

    if(c3 > c4){
        cout<< "yes" << endl;
    }else{
        cout<< "no" << endl;
    }

    c3[0] = 5;
    c3.show();

    c3 += c2 += c1;

    c1.show();
    c2.show();
    c3.show();

    Complex c5 = -c4;
    c5.show();

    return 0;
}

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

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

相关文章

Linux实用操作(固定IP、进程控制、监控、文件解压缩)

目录 一、快捷键 1、ctrl c强制停止 2、ctrl d退出或登出 3、历史命令搜索history 4、光标移动快捷键 5、清屏 二、软件安装 1、CentOS的yum命令 2、Ubantu的apt命令 三、systemctl命令 四、软连接 五、日期、时区 1、date命令 2、修改Linux时区为东八区 3、nt…

Linux基本指令(上)——“Linux”

各位CSDN的uu们好呀&#xff0c;今天&#xff0c;小雅兰的内容是Linux啦&#xff01;&#xff01;&#xff01;主要是Linux的一些基本指令和Linux相关的基本概念&#xff08;系统层面&#xff09;&#xff0c;下面&#xff0c;让我们进入Linux的世界吧&#xff01;&#xff01;…

OpenGLES:绘制一个混色旋转的3D圆锥

一.概述 1.1 对圆锥的拆解 上一篇博文讲解了绘制圆柱体&#xff0c;这一篇讲解绘制一个彩色旋转的圆锥 在绘制圆柱体时提到过&#xff0c;关键点是先将圆柱进行拆解&#xff0c;便于创建出顶点坐标数组 同样&#xff0c;绘制圆锥也先进行拆解 圆锥的拆解很简单&#xff0c…

BGP(Border Gateway Protocol)

目录 BGP报文类型 BGP状态机 BGP邻居 BGP同步规则 Transit AS中的IBGP路由传递 IBGP水平分割原则 路由通告规则 表 计时器 配置命令 维护BGP BGP表 路径属性 WEIGHT LOCAL PREFERENCE AS-path Origin MED NEXT_HOP NEXT_HOP on shared Media COMMUNIT…

Eevee引擎与渲染原理

操作视频&#xff1a; 02-Blender的Eevee渲染器_哔哩哔哩_bilibiliy 技术原理&#xff1a; How 3D Game Rendering Works, A Deeper Dive: Rasterization and Ray Tracing | TechSpot A guide to Blender Eevee render settings - Artisticrender.com 笔记&#xff1a; …

安装Vue脚手架图文详解教程

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 预备工作 在安装Vue脚手架之前&#xff0c;请确保您已经正确安装了npm&#xff1b;假若还尚未安装npm&#xff0c;请你参考 Node.js安装教程图文详解。 安装Vue脚手架 请…

STM32HAL库CRC学习及测试记录

STM32HAL库CRC学习及测试记录 1.CRC的校验原理2.基本原理3.几个基本概念13.1.1 CRC检验码的计算13.1.2 错误检测13.2 STM32中的CRC 4.CRC功能描述5.STM32Cube生成工程6.看官方说如何使用这个驱动程序7.实验现象 1.CRC的校验原理 循环冗余校验(CRC)计算单元是根据固定的生成多项…

实用的嵌入式 C 程序!建议收藏

在学习和工作开发的时候&#xff0c;经常需要使用到各种各样不太常用的操作&#xff0c;这种情况一般是自己手动写一些小程序来处理。因为它们不太常用&#xff0c;所以经常用了又没保存&#xff0c;等到下一次在使用的时候又需要重写&#xff0c;这样的非常浪费时间和精力。 …

力扣练习——链表在线OJ

目录 提示&#xff1a; 一、移除链表元素 题目&#xff1a; 解答&#xff1a; 二、反转链表 题目&#xff1a; 解答&#xff1a; 三、找到链表的中间结点 题目&#xff1a; 解答&#xff1a; 四、合并两个有序链表&#xff08;经典&#xff09; 题目&#xff1a; 解…

c++-vector

文章目录 前言一、vector介绍二、vector使用1、构造函数2、vector 元素访问3、vector iterator 的使用4、vector 空间增长问题5、vector 增删查改6、理解vector<vector< int >>7、电话号码的字母组合练习题 三、模拟实现vector1、查看STL库源码中怎样实现的vector2…

(四)激光线扫描-光平面标定

在上一章节,已经实现了对激光线条的中心线提取,并且在最开始已经实现了对相机的标定,那么相机标定的作用是什么呢? 就是将图像二维点和空间三维点之间进行互相转换。 1. 什么是光平面 激光发射器投射出一条线,形成的一个扇形区域平面就是光平面,也叫光刀面,与物体相交…

linux下查找文件的相关命令

linux下查找文件的相关命令 运行环境&#xff1a;centos7 参考来源&#xff1a;man、鸟哥入门书籍 一、脚本文件查找&#xff1a;which/type 1. which man手册描述&#xff1a; 返回当前环境可以被执行的文件&#xff08;或链接&#xff09;的路径。搜索PATH变量匹配参数中…

vuejs开发环境搭建

Vuejs是一个前端页面应用开发框架&#xff0c;它基于标准 HTML、CSS 和JavaScript 构建&#xff0c;支持不同的JavaScript开发规范&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面&#xff0c;本文主要描述Vuejs开发环境的搭建。Vuej…

大规模语言模型--训练成本

目前&#xff0c;基于 Transformers 架构的大型语言模型 (LLM)&#xff0c;如 GPT、T5 和 BERT&#xff0c;已经在各种自然语言处理 (NLP) 任务中取得了 SOTA 结果。将预训练好的语言模型(LM) 在下游任务上进行微调已成为处理 NLP 任务的一种 范式。与使用开箱即用的预训练 LLM…

基于SSM的视频点播系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

C++语言GDAL批量裁剪多波段栅格图像:基于像元个数裁剪

本文介绍基于C 语言的GDAL模块&#xff0c;按照给定的像元行数与列数&#xff0c;批量裁剪大量多波段栅格遥感影像文件&#xff0c;并将所得到的裁剪后新的多波段遥感影像文件保存在指定路径中的方法。 在之前的文章中&#xff0c;我们多次介绍了在不同平台&#xff0c;或基于不…

TouchGFX之后端通信

在大多数应用中&#xff0c;UI需以某种方式连接到系统的其余部分&#xff0c;并发送和接收数据。 它可能会与硬件外设&#xff08;传感器数据、模数转换和串行通信等&#xff09;或其他软件模块进行交互通讯。 Model类​ 所有TouchGFX应用都有Model类&#xff0c;Model类除了存…

色彩一致性自动处理方法在遥感图像中的应用

前言 在获取卫星遥感影像时&#xff0c;由于受不均匀的光照、不同的大气条件和不同的传感器设备等因素的影响&#xff0c;遥感影像中会存在局部亮度和色彩分布不均匀的现象&#xff0c;下面是在BigMap地图下载器中收集的几幅谷歌卫星影像&#xff0c;像下面这种都是拼接好的影像…

从零开始的C++(四)

上篇链接&#xff1a;http://t.csdnimg.cn/3nyT9 1.拷贝构造函数&#xff1a; 上篇中介绍了析构函数&#xff0c;即在对象销毁时自动调用的函数&#xff0c;常用于含有malloc、fopen等成员变量的对象。然而&#xff0c;在将对象做函数实参进行值传递的时候&#xff0c;可能会…

Unity宣布自2024年起将根据游戏安装量收费,你对此有何看法?

文章目录 每日一句正能量前言Unity的来历Unity的应用对于收费的看法个人角度&#xff1a;公司角度&#xff1a; 后记 每日一句正能量 水与水之间有距离&#xff0c;但地心下直相牵&#xff0c;人与人之间有距离&#xff0c;但心里时刻挂念&#xff0c;发条短信道声晚安&#xf…