2023.10.10

运算符重载

类外函数实现:

#include <iostream>using namespace std;class Good
{//算数friend const Good operator*(const Good &L,const Good &R);friend const Good operator+(const Good &L,const Good &R);friend const Good operator/(const Good &L,const Good &R);friend const Good operator-(const Good &L,const Good &R);friend const Good operator%(const Good &L,const Good &R);//关系friend bool operator>(const Good &L,const Good &R);friend bool operator>=(const Good &L,const Good &R);friend bool operator<(const Good &L,const Good &R);friend bool operator<=(const Good &L,const Good &R);friend bool operator==(const Good &L,const Good &R);//赋值friend Good &operator-=(Good &L,const Good &R);friend Good &operator+=(Good &L,const Good &R);friend Good &operator*=(Good &L,const Good &R);friend Good &operator/=(Good &L,const Good &R);friend Good &operator%=(Good &L,const Good &R);
private:int n;int f;int a;
public:Good(){}Good(int n,int f,int a):n(n),f(f),a(a){}void show() const{cout << "n:" << n << endl;cout << "f:" << f << endl;cout << "a:" << a << endl;//cout << "常" << endl;}};
//非成员
//算数+
const Good operator+(const Good &L,const Good &R)
{Good t;t.a=L.a+R.a;t.n=L.n+R.n;t.f=L.f+R.f;return t;
}
//算数*
const Good operator*(const Good &L,const Good &R)
{Good t;t.a=L.a*R.a;t.n=L.n*R.n;t.f=L.f*R.f;return t;
}
//算数-
const Good operator-(const Good &L,const Good &R)
{Good t;t.a=L.a-R.a;t.n=L.n-R.n;t.f=L.f-R.f;return t;
}
//算数/
const Good operator/(const Good &L,const Good &R)
{Good t;t.a=L.a/R.a;t.n=L.n/R.n;t.f=L.f/R.f;return t;
}
//算数%
const Good operator%(const Good &L,const Good &R)
{Good t;t.a=L.a%R.a;t.n=L.n%R.n;t.f=L.f%R.f;return t;
}
//关系运算<
bool operator<(const Good &L,const Good &R)
{if(L.a<R.a && L.n<R.n && L.f<R.f){return true;}else{return false;}
}
//关系运算>
bool operator>(const Good &L,const Good &R)
{if(L.a>R.a && L.n>R.n && L.f>R.f){return true;}else{return false;}
}
//关系运算>=
bool operator>=(const Good &L,const Good &R)
{if(L.a>=R.a && L.n>=R.n && L.f>=R.f){return true;}else{return false;}
}
//关系运算<=
bool operator<=(const Good &L,const Good &R)
{if(L.a<=R.a && L.n<=R.n && L.f<=R.f){return true;}else{return false;}
}
//关系运算==
bool operator==(const Good &L,const Good &R)
{if(L.a==R.a && L.n==R.n && L.f==R.f){return true;}else{return false;}
}
//赋值运算-=
Good &operator-=(Good &L,const Good &R)
{L.a-=R.a;L.n-=R.n;L.f-=R.f;return L;
}
//赋值运算+=
Good &operator+=(Good &L,const Good &R)
{L.a+=R.a;L.n+=R.n;L.f+=R.f;return L;
}
//赋值运算*=
Good &operator*=(Good &L,const Good &R)
{L.a*=R.a;L.n*=R.n;L.f*=R.f;return L;
}
//赋值运算/=
Good &operator/=(Good &L,const Good &R)
{L.a/=R.a;L.n/=R.n;L.f/=R.f;return L;
}
//赋值运算%=
Good &operator%=(Good &L,const Good &R)
{L.a%=R.a;L.n%=R.n;L.f%=R.f;return L;
}int main()
{cout << "-----0-----" << endl;Good s0(1,2,3);s0.show();cout << "-----1-----" << endl;Good s1(3,2,1);s1.show();cout << "----2.0----" << endl;Good s2=s0+s1;s2.show();cout << "----2.1----" << endl;s2+=s1;s2.show();cout << "s2>s1?" << endl;bool outcome=s2>s1;cout << outcome << endl;return 0;
}

类内函数实现:

#include <iostream>using namespace std;class Good
{
private:int n;int f;int a;
public:Good(){}Good(int n,int f,int a):n(n),f(f),a(a){}void show() const{cout << "n:" << n << endl;cout << "f:" << f << endl;cout << "a:" << a << endl;}//成员//算数+const Good operator+(const Good &p) const{Good t;t.a=a+p.a;t.n=n+p.n;t.f=f+p.f;return t;}//算数-const Good operator-(const Good &p) const{Good t;t.a=a-p.a;t.n=n-p.n;t.f=f-p.f;return t;}//算数*const Good operator*(const Good &p) const{Good t;t.a=a*p.a;t.n=n*p.n;t.f=f*p.f;return t;}//算数/const Good operator/(const Good &p) const{Good t;t.a=a/p.a;t.n=n/p.n;t.f=f/p.f;return t;}//算数%const Good operator%(const Good &p) const{Good t;t.a=a%p.a;t.n=n%p.n;t.f=f%p.f;return t;}//关系>bool operator>(const Good &R) const{if(a>R.a && n>R.n && f>R.f){return true;}else{return false;}}//关系<bool operator<(const Good &R) const{if(a<R.a && n<R.n && f<R.f){return true;}else{return false;}}//关系==bool operator==(const Good &R) const{if(a==R.a && n==R.n && f==R.f){return true;}else{return false;}}//关系>=bool operator>=(const Good &R) const{if(a>=R.a && n>=R.n && f>=R.f){return true;}else{return false;}}//关系<=bool operator<=(const Good &R) const{if(a<=R.a && n<=R.n && f<=R.f){return true;}else{return false;}}//赋值+=Good &operator+=(const Good &R){a+=R.a;n+=R.n;f+=R.f;return *this;}//赋值=Good &operator=(const Good &R){a=R.a;n=R.n;f=R.f;return *this;}//赋值-=Good &operator-=(const Good &R){a-=R.a;n-=R.n;f-=R.f;return *this;}//赋值%=Good &operator%=(const Good &R){a%=R.a;n%=R.n;f%=R.f;return *this;}//赋值/=Good &operator/=(const Good &R){a/=R.a;n/=R.n;f/=R.f;return *this;}//赋值*=Good &operator*=(const Good &R){a*=R.a;n*=R.n;f*=R.f;return *this;}
};int main()
{cout << "-----0-----" << endl;Good s0(1,2,3);s0.show();cout << "-----1-----" << endl;Good s1(3,2,1);s1.show();cout << "----2.0----" << endl;Good s2=s0+s1;s2.show();cout << "----2.1----" << endl;s2+=s1;s2.show();cout << "s2>s1?" << endl;bool outcome=s2>s1;cout << outcome << endl;return 0;
}

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

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

相关文章

机器学习、深度学习相关的项目集合【自行选择即可】

【基于YOLOv5的瓷砖瑕疵检测系统】 YOLOv5是一种目标检测算法&#xff0c;它是YOLO&#xff08;You Only Look Once&#xff09;系列模型的进化版本。YOLOv5是由Ultralytics开发的&#xff0c;基于一阶段目标检测的概念。其目标是在保持高准确率的同时提高目标检测的速度和效率…

Android 内存泄漏分析思路和案例剖析

分析思路 内存泄漏是指 Android 进程中&#xff0c;某些对象已经不再使用&#xff0c;但被一些生命周期更长的对象引用&#xff0c;导致其占用的内存资源无法被GC回收&#xff0c;内存占用不断增加的一种现象&#xff1b;内存泄漏是导致我们应用性能下降、卡顿的一种常见因素&…

epoll 定时器

参考&#xff1a; Linux下使用epoll监听定时器-CSDN博客 但是这个用的是gettimeofday。 本人使用的是 #include <stdlib.h> #include<stdio.h> #include <sys/timerfd.h> #include <sys/epoll.h> #include <unistd.h> #include <sys/time.…

库存管理方法有哪些?

本文将为大家讲解&#xff1a;库存管理方法有哪些&#xff1f; 库存管理是企业运营中的核心环节&#xff0c;它涉及到货物的采购、存储、销售和配送。有效的库存管理可以确保企业有足够的货物满足客户的需求&#xff0c;同时避免库存积压和浪费。为了达到这个目标&#xff0c;…

洛谷100题DAY7

31.P1636 Einstein学画画 此题为欧拉通路&#xff0c;必须要满足奇点的个数为0或2个 奇点&#xff1a;度数&#xff08;入度出度&#xff09;为奇数的点 如果奇点为2个或者0个就可以直接一笔化成 eg. 我们发现奇数点个数每增加2个就多一笔 #include<bits/stdc.h> us…

Navicat定时任务

Navicat定时任务 1、启动Navicat for MySQL工具&#xff0c;连接数据库。 2、查询定时任务选项是否开启 查询命令&#xff1a;SHOW VARIABLES LIKE ‘%event_scheduler%’; ON表示打开&#xff0c;OFF表示关闭。 打开定时任务命令 SET GLOBAL event_scheduler 0; 或者 SET G…

解决yolo无法指定显卡的问题,实测v5、v7、v8有效

方法1 基本上这个就能解决了&#xff01;&#xff01;&#xff01; 在train.py的最上方加上下面这两行&#xff0c;注意是最上面&#xff0c;其次指定的就是你要使用的显卡 import os os.environ[CUDA_VISIBLE_DEVICES]6方法2&#xff1a; **问题&#xff1a;**命令行参数指…

数据库系统工程师------时间周期

时间周期 计算机各种周期 时钟周期 机器&#xff08;CPU&#xff09;周期 指令周期 总线周期 时钟周期&#xff1a;也称振荡周期&#xff0c;定义为时钟频率的倒数。是计算机中最基本、最小的时间单位。 机器&#xff08;CPU&#xff09;周期&#xff1a;也称CPU周期&…

WPF中DataContext的绑定技巧

先看效果&#xff1a; 上面的绑定值都是我们自定义的属性&#xff0c;有了以上的提示&#xff0c;那么我们可以轻松绑定字段&#xff0c;再也不用担心错误了。附带源码。 目录 1.建立mvvm项目 2.cs后台使用DataContext绑定 3.xaml前台使用DataContext绑定 4.xaml前台使用Da…

阿里春招JAVA后端面试总结

阿里巴巴春招的后端面经,问了比较多的计算机基础和数据库的内容。 操作系统 一个操作系统,我们在衡量它的内存占用的时候,它一般会有哪些内存的部分? 答:堆和栈 补充: 这个其实是问你对free命令的理解。 主机的内存做一些清理的动作。你知道这里面会涉及到对哪些…

树莓派ubuntu上配置miniconda并创建虚拟环境

树莓派安装ubuntu和miniconda配置 本文所配置环境为&#xff1a;树莓派4B安装的系统为ubuntu 22 server&#xff0c;所配置的miniconda版本为4.2&#xff0c;python版本3.8。在此之前要清楚树莓派4B已经将处理器从arm架构换成了aarch64架构&#xff0c;所以能够使用最新的aarc…

记录在搭建Jenkins时,所遇到的坑,以及解决方案

项目场景&#xff1a; 记录在搭建Jenkins时,所遇到的坑,以及解决方案.问题描述1 在使用Jenkins构建时,报错如下&#xff1a; cp: cannot stat /project/xx/xxxx/dist/: No such file or directory Build step Execute shell marked build as failure Finished: FAILURE解决方…