C++---重载

news2025/1/11 23:59:33

1、运算符重载

#include <iostream>
 
 
using namespace std;
class complex
{
    int rel;
    int vir;
public:
    complex(){}
    complex(int rel,int vir):rel(rel),vir(vir){}
    void show()
    {
        cout << rel << "+" << vir << "i" << endl;
    }
    //算数运算符重载
    //+
    //complex operator+(complex c1);
    friend complex operator+(const complex c1,const complex c2);
    complex operator-(complex c1);
    friend complex operator-(const complex c1,const complex c2);
    //*
    complex operator*(complex c1);
    friend complex operator*(const complex c1,const complex c2);
    //%
    complex operator%(complex c1);
    friend complex operator%(const complex c1,const complex c2);
 
 
    // 关系运算符
    //>
    //bool operator>(complex c1);
    friend bool operator>(const complex c1,const complex c2);
    //<
//    bool operator<(complex c1);
    friend bool operator<(const complex c1,const complex c2);
    //>=
    bool operator>=(complex c1);
    //friend operator>=(const complex c1,const complex c2);
    // <=
    //bool operator<=(complex c1);
    friend bool operator<=(const complex c1,const complex c2);
    // !=
    bool operator!=(complex c1);
    //逻辑运算符
    //&&
    bool operator&&(complex c1);
    //++
    friend complex operator++(complex c1,int);
    //<<
    friend ostream &operator<<(ostream &out,complex c1);
    //>>
    friend istream &operator >>(istream &in,complex &c1);
    //
    friend bool operator^(const complex c1,const complex c2);
    //~
    friend int operator~(const complex c1);
 
 
 
 
 
 
 
 
};
//算术运算符重载
//+
//complex complex::operator+(complex c1)
//{
//    complex temp;
//    temp.rel=this->rel+c1.rel;
//    temp.vir=this->vir+c1.vir;
//    return  temp;
//}
complex operator+(const complex c1,const complex c2)
{
    complex temp;
    temp.rel=c1.rel+c2.rel;
    temp.vir=c1.vir+c2.vir;
    return  temp;
}
//-
complex complex::operator-(complex c1)
{
    complex temp;
    temp.rel=this->rel-c1.rel;
    temp.vir=this->vir-c1.vir;
    return  temp;
}
complex operator-(const complex c1,const complex c2)
{
    complex temp;
    temp.rel=c1.rel-c2.rel;
    temp.vir=c2.vir-c2.vir;
    return temp;
}
//*
complex complex::operator*(complex c1)
{
    complex temp;
    temp.rel=this->rel*c1.rel;
    temp.vir=this->vir*c1.vir;
    return temp;
}
complex operator*(const complex c1,const complex c2)
{
    complex temp;
    temp.rel=c1.rel*c2.rel;
    temp.vir=c2.vir*c2.vir;
    return  temp;
}
//%
complex complex::operator%(complex c1)
{
    complex temp;
    if(c1.rel==0||c1.vir==0)
    {
        cout << "分母错误" << endl;
    }
    temp.rel=this->rel%c1.rel;
    temp.vir=this->vir%c1.vir;
    return temp;
}
complex operator%(const complex c1,const complex c2)
{
    complex temp;
    if(c2.rel==0||c2.vir==0)
    {
        cout << "分母错误"  << endl;
    }
    temp.rel=c1.rel%c2.rel;
    temp.vir=c1.vir%c2.vir;
    return  temp;
}
//关系运算符
// >
//bool complex::operator>(complex c1)
//{
//    return this->rel>c1.rel;
//}
bool operator>(const complex c1,const complex c2)
{
    return c1.rel>c2.rel;
}
// <
//bool complex::operator<(complex c1)
//{
//    return this->rel<c1.rel;
//}
bool operator<(const complex c1,const complex c2)
{
    return c1.rel<c2.rel;
}
//>=
bool complex::operator>=(complex c1)
{
    if(this->rel>=c1.rel)
    {
        if(this->rel==c1.rel)
        {
            return this->vir==c1.vir;
        }
        else
        {
            return this->rel>c1.rel;
        }
    }
    else
    {
        return this->rel>c1.rel;
    }
}
// <=
bool operator<=(const complex c1,const complex c2)
{
    if(c1.rel<=c2.rel)
    {
        if(c1.rel==c2.rel)
        {
            return c1.vir==c2.vir;
        }
        else
        {
            return  c1.rel<=c2.rel;
        }
    }
    else
    {
        return  c1.rel<=c2.rel;
    }
}
//!=
bool complex::operator!=(complex c1)
{
    return this->rel!=c1.rel||this->vir!=c1.vir;
 
 
}
 
 
//逻辑运算符
//&&
bool complex ::operator&&(complex c1)
{
    return (this->rel&&c1.rel)||(this->vir&&c1.vir);
}
//++
complex operator++(complex c1,int)
{
    complex temp;
    temp.rel=c1.rel++;
    temp.vir=c1.vir++;
    return  temp;
}
//<<
ostream &operator<<(ostream &out,complex c1)
{
    out<< c1.rel << "+" << c1.vir << "i" <<endl;
    return out;
}
//>>
istream &operator >>(istream &in,complex &c1)
{
    in >> c1.rel >> c1.vir;
    return  in;
}
 
 
//^
bool operator^(const complex c1,const complex c2)
{
    if(c1.rel == c2.rel)
        return false;
    else
        return  true;
}
//~
int operator~(const complex c1)
{
    int temp(~c1.rel);
    return temp;
}
 
 
 
 
 
 
int main()
{
    complex a1(1,5),a2(3,5);
   // complex a3=a1+a2;
   // a3.show();
    complex a3=operator+(a1,a2);
    a3.show();
    //complex a4=a1-a2;
   // a4.show();
    complex a4=operator-(a1,a2);
    a4.show();
    //*
//    complex a5=a1*a2;
//    a5.show();
    complex a5=operator*(a1,a2);
    a5.show();
    //%
//    complex a6=a1%a2;
//    a6.show();
    complex a6=operator%(a1,a2);
    a6.show();
    //关系运算符
    // >
    cout << (a1>a2) << endl;
    // <
    cout << (a1<a2) << endl;
    cout << (a1>=a2) << endl;
    cout << (a1<=a2) << endl;
    cout << (a1&&a2) <<endl;
    complex a7=a1++;
    a7.show();
    cout << "out=" << a1 << endl;
    cin >> a5 >>a6;
    cout << (a1^a2) << endl;
    int b1=10;
    int b2=~b1;
    cout << "~b1" << b2 << endl;
    cout << "Hello World!" << endl;
    return 0;
}
2、思维导图

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

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

相关文章

nodejs写接口(一)

一、新手上路十大步 &#xff08;1&#xff09;先建一个常用的文件夹 &#xff08;2&#xff09;使用code打开 &#xff08;3&#xff09;在里面新建一个index.js文件 &#xff08;4&#xff09;新建项目 npm init -y //用于自己搭建一个项目框架&#xff08;写框架&#xf…

STL复习

vector STL详解及常见面试题_stl常见面试题-CSDN博客 C vector中resize()和reserve()区别_c vector resize和reserve区别-CSDN博客 释放vectro内存&#xff1a; map释放内存 deque&#xff1a; C STL deque 容器底层实现原理&#xff08;深度剖析&#xff09; - 知乎 (zhihu.…

智能私信软件:转化率提升的神器

在数字化营销领域&#xff0c;利用智能私信软件策略提升转化率已经成为一种不可忽视的趋势。随着人工智能技术的发展&#xff0c;这些软件变得越来越智能&#xff0c;能够根据用户的行为和偏好提供个性化的沟通体验。在这篇文章中&#xff0c;我们将探讨如何有效地运用智能私信…

Opencv_14_多边形填充与绘制

绘制多边形&#xff1a; 1&#xff09;coInvert.polyline_drawing(src); 2&#xff09;void ColorInvert::polyline_drawing(Mat& image) { Mat canvas Mat::zeros(Size(512, 512), CV_8UC3); Point p1(100, 100); Point p2(150, 100); Point p3(200…

2000.1-2023.8中国经济政策不确定性指数数据(月度)

2000.1-2023.8中国经济政策不确定性指数数据&#xff08;月度&#xff09; 1、时间&#xff1a;2000.1-2023.8 2、指标&#xff1a;CNEPU&#xff08;经济政策不确定性指数&#xff09; 3、来源&#xff1a;China Economic Policy Uncertainty Index 4、用途&#xff1a;可…

公开课—京东生产环境海量数据架构优化实战

文章目录 读多写少——主库用来写&#xff0c;从库用来读单库的写压力太大——数据库的垂直和水平拆分分表怎么分呢&#xff1f;hash分表range分表多数据源操作与分布式事务问题 ShardingSphare分库分表&#xff08;京东开源&#xff09;关联查询怎么办&#xff1f;跨多个库&am…

CUDA的基础知识

文章目录 数据精度CUDA概念线程&线程块&线程网络&计算核心GPU规格参数内存 GPU并行方式数据并行流水并行张量并行混合专家系统 数据精度 FP32 是单精度浮点数&#xff0c;用8bit 表示指数&#xff0c;23bit 表示小数&#xff1b;FP16 是半精度浮点数&#xff0c;用…

【C++】封装哈希表 unordered_map和unordered_set容器

目录​​​​​​​ 一、unordered系列关联式容器 1、unordered_map 2、unordered_map的接口 3、unordered_set 二、哈希表的改造 三、哈希表的迭代器 1、const 迭代器 2、 operator 3、begin()/end() ​ 4、实现map[]运算符重载 四、封装 unordered_map 和 unordered_se…

ThinkPHP Lang多语言本地文件包含漏洞(QVD-2022-46174)漏洞复现

1 漏洞描述 ThinkPHP是一个在中国使用较多的PHP框架。在其6.0.13版本及以前&#xff0c;存在一处本地文件包含漏洞。当ThinkPHP开启了多语言功能时&#xff0c;攻击者可以通过lang参数和目录穿越实现文件包含&#xff0c;当存在其他扩展模块如 pear 扩展时&#xff0c;攻击者可…

【城市】2023香港身份与生活定居相关政策(IANG,优才/高才/专才,受养人/单程证)

【城市】2023香港身份与生活定居相关政策&#xff08;IANG&#xff0c;优才/高才/专才&#xff0c;受养人/单程证&#xff09; 文章目录 一、如何获得香港身份1、7年计划2、旅游签 二、港澳相关的证件类别1、HK证件2、CN证件 三、香港生活对比内地 本文仅代表2023年查阅相关资料…

「C/C++ 01」计算结构体/类的大小和内存对齐

目录 一、计算结构体的大小 二、计算类的大小 三、内存对齐 一、计算结构体的大小 计算结构体的大小要遵循内存对齐规则&#xff1a;即从第二个成员变量开始&#xff0c;起始位置要计算&#xff0c;在自己的大小和默认对齐数(VS编译器中默认对齐数为8)中选择较小的那个&#x…

LVGL自定义滑动

触摸和编码器都可以操作 typedef struct {lv_obj_t* obj;int16_t x;int16_t y;int16_t width;int16_t height; }pos_and_size_t;typedef struct {lv_obj_t* obj;lv_coord_t height;lv_coord_t width;lv_coord_t width_pad;lv_coord_t height_pad;lv_coord_t child_widget;lv_co…

监控操作台为生活提供安全保障

在科技日新月异的现代社会&#xff0c;监控操作台已成为我们生活中不能缺少的一部分。它犹如一座城市的守护神&#xff0c;默默无闻地守护着我们的安全&#xff0c;确保着每一刻的平安。今天&#xff0c;和北京嘉德立一同走进这个神秘的世界&#xff0c;揭开监控操作台的神秘面…

(十四)Servlet教程——Servlet中HttpSession的使用

除了使用Cookie&#xff0c;Web应用程序中还经常使用Session来记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制&#xff0c;相应地也增加了服务器的存储压力。 1. 什么是Session Session是另外一种记录客户端状态的机制&#xff0c;不同的是Cookie保存在客户…

线程池嵌套导致的死锁问题

1、背景 有一个报告功能&#xff0c;报告需要生成1个word&#xff0c;6个excel附件&#xff0c;总共7个文件&#xff0c;需要记录报告生成进度&#xff0c;进度字段jd初始化是0&#xff0c;每个文件生成成功进度加1&#xff0c;生成失败就把生成状态置为失败。 更新进度语句&…

Vue入门到关门之Vue项目工程化

一、创建Vue项目 1、安装node环境 官网下载&#xff0c;无脑下一步&#xff0c;注意别放c盘就行 Node.js — Run JavaScript Everywhere (nodejs.org) 需要两个命令 npm---->pipnode—>python 装完检查一下&#xff0c;hello world检测&#xff0c;退出crtlc 2、搭建vu…

Linux:浏览器访问网站的基本流程(优先级从先到后)

浏览器访问网站的基本流程&#xff08;优先级从先到后&#xff09; 首先查找浏览器是否存在该网站的访问缓存 其次查找本机的域名解析服务器 windows&#xff1a;C:\Windows\System32\drivers\etc\hostsLinux&#xff1a;/etc/hosts 使用外部的域名解析服务器解析&#xff…

逆向第一步 去掉debugger(无任何门槛小白可学习)

准备工具 1.ReRes 地址&#xff1a;ReRes 用法&#xff1a; 用法 2.nodepad 地址&#xff1a;nodepad 注意下载后缀为.x64.exe版本的 我这里下的npp.8.6.5.Installer.x64.exe 3给nodepad装上JSTool插件 下载 可省略下叙详细步骤点此链接直接下载 JSToolNpp 然后到导…

Go语言基本语法(三)指针

什么是指针 在Go语言中&#xff0c;"指针是一种存储变量内存地址的数据类型"&#xff0c;意味着指针本身是一个特殊的变量&#xff0c;它的值不是数据本身&#xff0c;而是另一个变量在计算机内存中的位置&#xff08;地址&#xff09;。形象地说&#xff0c;就像存…

Avalonia .NET构建Linux桌面应用

目录 &#x1f47b;前言 &#x1f4bb;安装Avalonia &#x1f4e6;创建项目 &#x1f4da;在win下运行 ​&#x1f511;打包发布​编辑 &#x1f4fb;在linux下运行 环境WIN10 VS2022 debian &#x1f47b;前言 Avalonia 是一个用于创建跨平台用户界面 (UI) 的开源框架…