当前位置: 首页 > news >正文

重载一元运算符

自增++运算符

#include<iostream>
using namespace std;
class CGirl
{
public:string name;int ranking;CGirl() { name = "zhongge"; ranking = 5; }void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }};
int main() {CGirl g1;g1.show();return 0;
}

现在我们重载一个++运算符

#include<iostream>
using namespace std;
class CGirl
{
public:string name;int ranking;CGirl() { name = "zhongge"; ranking = 5; }void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }void operator++() {ranking++;}};
int main() {CGirl g1;++g1;g1.show();return 0;
}

main函数里的g1++不行但是++g1就行了;

然而你++(++g)不行,你让你重载函数返回对象的引用就可以了;

#include<iostream>
using namespace std;
class CGirl
{
public:string name;int ranking;CGirl() { name = "zhongge"; ranking = 5; }void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }CGirl & operator++() {ranking++;return *this;}};
int main() {CGirl g1;++(++g1);g1.show();return 0;
}

上面这是自增运算符的前置,我们再来个后置的;

c++规定重载自增&自减运算符,如果重载函数有一个int形参,编译器处理后置表达式时将调用这个重载函数。

#include<iostream>
using namespace std;
class CGirl
{
public:string name;int ranking;CGirl() { name = "zhongge"; ranking = 5; }void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }CGirl & operator++(int ) {ranking++;return *this;}};
int main() {CGirl g1;g1++;g1.show();return 0;
}

这样就ok了;

-----------------------------------------------------------------------------------------------------------------------

整数的话不可以后自增嵌套,前自增嵌套可以;

#include<iostream>
using namespace std;
class CGirl
{
public:string name;int ranking;CGirl() { name = "zhongge"; ranking = 5; }void show() const{ cout << "name : "<<name << " , ranking : " << ranking; }CGirl& operator++(int ) {ranking++;return *this;}};
int main() {CGirl g1,g2;g2=g1++;g2.show();g1.show();return 0;
}

name : zhongge , ranking : 6name : zhongge , ranking : 6
C:\Users\33007\source\repos\ConsoleApplication8\x64\Debug\ConsoleApplication8.exe (进程 9820)已退出,代码为 0。
按任意键关闭此窗口. . .

显然你g1++是后来加,g2应该是g1之前的值而不是增后的值。

所以改一下后++的代码;

CGirl operator++(int ) {CGirl tmp = *this;ranking++;return tmp;
}

 函数的返回值不能是引用,成员函数的临时对象不能引用;

name : zhongge , ranking : 5name : zhongge , ranking : 6
C:\Users\33007\source\repos\ConsoleApplication8\x64\Debug\ConsoleApplication8.exe (进程 15512)已退出,代码为 0。
按任意键关闭此窗口. . .

这样功能就对上了;

http://www.lryc.cn/news/392471.html

相关文章:

  • 10元 DIY 一个柔性灯丝氛围灯
  • 表单自定义组件 - 可选择卡片SelectCard
  • Ubuntu / Debian安装FTP服务
  • 若依 Vue 前端分离 3.8.8 版中生成的前端代码中关于下拉框只有下拉箭头的问题
  • C++把一个类封装成动态链接库
  • 每天一个项目管理概念之项目章程
  • c++11新特性-4-返回类型后置
  • Linux-C语言实现一个进度条小项目
  • vue使用glide.js实现轮播图(可直接复制使用)
  • TK养号工具开发会用上的源代码科普!
  • 信创-办公软件应用工程师认证
  • 数组操作forEach和map
  • 流式处理应用场景与流式计算处理框架选择建议
  • 2024年软件测试岗必问的100+个面试题【含答案】
  • A4-C四驱高防轮式巡检机器人
  • Https网站如何申请免费的SSL证书及操作使用指南
  • 实现资产优化管理:智慧校园资产分类功能解析
  • 大厂开发必知必会:Devops、CI/CD、流水线和Paas的关系解析说明
  • Qt学习:Qt窗口组件以及窗口类型
  • 基于AGX ORIN与FPGA K7实现PCIE高速数据通信/Orin与FPGA高速数据传输/XDMA在linux系统使用教程
  • Vue3:全局播放背景音乐
  • 2024年07月03日 Redis部署方式和持久化
  • 成都仅需浏览器即可快速查看的数据采集监控平台!
  • LLM - 神经网络的训练过程
  • 【全网最全ABC三题完整版】2024年APMCM第十四届亚太地区大学生数学建模竞赛(中文赛项)完整思路解析+代码+论文
  • Python | Leetcode Python题解之第213题打家劫舍II
  • 揭秘数据之美:【Seaborn】在现代【数学建模】中的革命性应用
  • 【宠粉赠书】UML 2.5基础、建模与设计实践
  • Python中几个重要的集合
  • 【JS】纯web端使用ffmpeg实现的视频编辑器-视频合并