C++中关于重载后置++运算符的问题

C++ 重载++运算符 以及在 重载后置++运算符 中发现的问题 重载代码 #include <iostream> using namespace std; //声明类 class Myinteger { friend ostream& operator<<(ostream& cout, Myinteger myint); public: //默认构造函数将m_Num初始化为0 Myinteger() { ... 阅读详情

碰到这么个程序,开始一直对结果不理解,现在终于弄懂了大笑

#include <iostream>
using namespace std;

struct A
{
    static int x;
    int y;
    int z;
public:
    operator int()
    {
        return x-y;
    }
    A operator ++(int)
    {
        return A(x++,y++);
    }
    A(int x=1,int y=2)
    {
        A::x=x;
        A::y=y;
    }
};
int A::x=23;

int main()
{
    int i;
    A a(4,3);
    cout<<"a.x"<<a.x<<"  a.y"<<a.y<<endl;
    i=a++;
    cout<<"a.x"<<a.x<<"  a.y"<<a.y<<endl;
    return 0;
}


输出为  a.x4  a.y3
             a.x4  a.y4

 

1、A a(4,3);  会调用构造函数,a.x=4(A::x=4),a.y=3;
2、i=a++;    会调用A operator ++(int){return A(x++,y++);}  

        调用构造函数时的值传递  函数值传递,相当于赋值操作,调用构造函数时实参赋值给形参的具体操作应该是x=x++,y=y++,

        左值的x为4,左值的y为3,而右值的x为右值的y为4。
3、构造构造调用  这里就需要注意了,这儿会生成一个新的对象,因为调用了A的构造函数,我们姑且叫作生成这个对象为b,由于X的值是共享的,

       所以b可以改变X的    值,A::x = 4,所以X的值为4,但是A::y = y这个就改变不了y的值了,这儿的赋值,意思是b.y = 3,而对象a.y的值当然没变仍然是4.

 

【OpenCV】复杂场景下的高精度圆检测实战(附完整代码) 本文针对OpenCV霍夫圆检测在复杂场景下易失效的问题,提出了一套基于轮廓分析的高精度圆检测实战方案。通过图像预处理、轮廓发现及多轮几何筛选(面积、周长、椭圆拟合、多边形逼近),有效排除噪声和类圆干扰物,显著提升复杂场景下的检测鲁棒性,并附完整可调参的Python代码实现。 阅读详情

相关推荐

机器视觉--线扫相机触发:从原理到选型,构建高效成像方案

本文深入解析线扫相机触发技术,从硬件编码器触发到软件触发方案,提供详细的性能对比和选型指南。通过实际案例展示如何构建高效成像方案,特别适合机器视觉领域需要精准控制的应用场景,如工业检测和自动化生产线。

weixin_42531886的博客 414

动态链表

#define _CRT_SECURE_NO_WARINGS #include <stdlib.h> #include <string.h> #include <iostream> using namespace std; typedef struct Teacher { int data; struct Teacher *next; } Te...

小吕的博客 299

普罗米修斯监控达梦数据库集群

-----------------------------------新增文件---------------------------------------注:图上即为启动成功,如果没有问题,则使用nohup后台启动程序。官网地址:https://github.com/gy297879328/dameng_exporter。注:prometheus的对数据库的指标采集如果高于60s一次,请手动修改提供表盘中的计算值。修改dameng_exporter.config配置文件,修改账号密码的部分。

weixin_49985403的博客 1679

c++函数重载

概念 在C++程序中,将在同一作用域内,语义、功能相似具有相同函数名字,不同参数列表(参数的个数,顺序和类型不同)的函数。 函数重载的实现 名字修饰概念 因为最终的二进制可执行程序是不允许有同名函数出现的。作为语言实现的编译器必须为每一个被重载的函数生成唯一的内部变量 首先了解程序运行经历的几个阶段:预处理、编译、汇编、链接。 名字修饰即就是一种在编译过程中,将函数、变量名称重新改编的机制。 C语言的名字修饰 只是在函数名字前面添加了下划线。比如,对于以下代码,在最后链接时就会出错: C++的名字修饰 C+

baobao1767640830的博客 332

超越数据手册:深入Zynq XADC的DRP接口与PL端自定义采样逻辑

本文深入探讨Zynq-7000系列XADC模块的DRP接口机制与PL端自定义采样逻辑实现。通过硬件级多通道轮询、触发采样和实时校准技术,突破传统软件驱动限制,为高精度电压测量和通讯应用提供极致灵活性和响应速度。

xxx12的博客 769

微信DAT图片恢复全攻略:从文件路径到批量解密(附最新工具下载)

本文详细介绍了微信DAT图片恢复的全过程,从文件路径定位到批量解密操作,帮助用户高效恢复加密存储的图片。文章涵盖新旧版本微信的存储结构差异,推荐使用专业解密工具进行批量转换,并提供了提升恢复成功率的实用技巧和常见问题解决方案。

weixin_29325007的博客 455

【C++】运算符重载

加号运算符重载 对于一般数据类型的数据运算,计算机是可以进行运算的,但是如果操作数是一些我们自己定义的数据类型,那么计算机就不知道怎么处理了,这时候就需要我们自己写个运算符重载的函数,对运算符进行重载,说直白点,就是手动添加一种自定义类型运算方式。 举个例子:我们创建一个类,这个类有两个成员变量。 class Info { public: int a; int b; }; int main() { Info Exp1; Info Exp2; Info Exp3; Exp1.a =

m0_61151031的博客 503

基于STM32设计的智能家居控制系统(华为云)_363

本项目设计并实现了一种基于STM32的智能家居控制系统,融合了语音识别、远程控制、环境监测与安全报警等功能。系统以STM32F103C8T6单片机为核心控制器,集成ESP8266 Wi-Fi模块实现与华为云IOT物联网平台的数据交互,采用MQTT协议进行通信。用户可通过语音识别模块控制风扇、空调、窗帘、卧室灯、客厅灯和电视等家电的开关操作,同时也可通过Android手机APP或Windows电脑上位机进行远程控制。系统还具备温湿度、光照强度、烟雾浓度和火焰检测功能,当检测到异常情况时,自动触发蜂鸣器报警并向

879

C++ 中关于前++和后++重载的问题

C++关于++运算符的重载

JAN6055的博客 827

【定位模块项目实战】gnss_localizer、lidar_localizer功能包解析

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、1.2.3.4.二、1.2.3.4.三、1.2.3.4.四、1.2.3.4.总结参考资料 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对**【无人驾驶autoware项目实战】感知–定位模块**做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、 1. 2. 3. 4. . . 二、

qq_35635374的博客 1931

【网络与爬虫 61】移动端App爬虫终极指南:Android-iOS应用数据提取黑科技全解析

本文全面解析移动端App爬虫技术,涵盖Android和iOS两大平台的数据提取方法。从基础的网络抓包到高级的代码注入,从自动化测试框架到反调试技术绕过,为开发者提供移动端数据采集的完整解决方案和实战经验。

熵数实验室 3023

C++ | 重载运算符实现后置++的时候 关于函数形参不可使用引用的问题

c++知识点

1900的博客 1591

在ParaView中编程实现涡量可视化

综上所述,本文介绍了在ParaView中使用编程方式实现涡量可视化的方法,并提供了相应的Python代码示例。通过灵活运用ParaView的编程接口,我们可以根据特定需求定制复杂的数据可视化流程,进一步深入了解和分析流体的旋转行为。ParaView是一款强大的开源数据可视化工具,它提供了丰富的功能和灵活的编程接口,使用户能够定制数据可视化流程。你可以根据需要自定义颜色映射范围和颜色,上述代码中的RGBPoints列表中包含了两个点,分别对应涡量值为0和10时的颜色。在实际使用过程中,你需要替换代码中的。

ByteProwl的博客 1434

C++语法|++i和i++的效率问题|重载前置++运算符和重载后置++运算符

+i 和 i++在不涉及到类的前加和后加,除了代码顺序的差异,其实在效率上来说并没有什么区别。如果加上编译器的优化,他们生成的汇编指令可能是完全相同的。但是我们今天主要就讨论这样的情况。如果把i++比做一个函数,由于语法规则的要求,它只能把加1千的原始值,返回给主调函数。所以,在自加1之前,它需要用一个临时变量,保存自己的原始值,而构建原始原谅的这个操作就是占用内存和CPU资源的始作俑者。

糖炒栗子 983

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C++左移运算符重载第二参数问题(与后置++运算符重载联用)

需要注意区分的是(1)在前置++运算符重载与

weixin_41054491的博客 659

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C++类和对象 - 拷贝构造, 赋值重载

拷贝构造作用:一个已经存在的对象去初始化另一个要创建的对象日常写代码中会出现如下场景:在上面的代码中, 我们想要使用一个已存在的对象去初始化另一个对象, 此时拷贝构造的作用就体现出来了.

m0_74506452的博客 1668

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

c++ -> 后置++运算符重载(单目运算符)

我们知道一个数 a 实现自增1的方式有两种: 1. a++        2. ++a同样的如果像把它应用到c++运算符重载里面,实现类的某些属性的自增1操作,也应该有两种形式之前我已经给过实现前置++运算符重载的方法了,没看过的小伙伴可以戳这里当我们想要实现后置++运算符的时候,问题来了:前置++和后置++运算符函数重名了!(形式全为 :XX类名  operator++(参数) )如果是这样当我...

desporado的博客 4603

C++自增运算符重载——2022年12月~2023年1月cpp学习记录

我关于Cpp自增运算符重载技术的学习笔记,此博客记录了我在学习该技术的过程中遇到的问题和思考。

strive_max的博客 1776

++运算符重载,--运算符重载

++运算符重载,--运算符重载

敖丙007的博客 1263

运算符重载

运算符重载 定义:运算符重载就是对已有的运算符进行重新定义,赋予其另一种功能,以适应不同的数据类型 目的:让语法更加简洁 本质:调用另一种函数(是编译器去调用) 关键字:operator 对象名 operator运算符(对象) 通用: 1.一般运算符都重载了基础数据类型 2.作为类的成员函数,重载运算符只能有一个参数 注: 一元运算符:只有一个操作数,比如,a++,a-- 二元运算符:有两个操作数,比如,a+b,a-b,a/b,a*b ...

A_ns_wer_的博客 2146

c++运算符重载

问题: 【双目运算符和单目运算符的重载】 建立一个矩阵类,可以完成指定的操作或运算。 说明: 矩阵为2行3列,基类型为整型; 操作或运算:初始化(>>)、输出(<<)、赋值(=)、两个同类型矩阵的相加(+)、矩阵前置自增(++,即所有元素都加1)、矩阵后置自增(++,即所有元素都加1)、一个整数乘矩阵(*,即该整数乘以每个元素)、矩阵乘一个整数(*,即每个元素乘以该整数)。 要求:针对矩阵的各种操作,请先确认使用何种类型函数实现(仅限于成员函数、友元函数,暂不使用转换构造函

starryt3的博客 1620

【运算符重载&& Date类】

看上面,没有赋值函数,还是进行赋值了,编译器会默认生成一个赋值函数,对简单的自定义类型可以复制,所谓的值拷贝(浅拷贝),但是不能进行深拷贝,要自己手动写赋值函数,如Stack.C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,比如想让别人获取到指定的内容!: . 注意以上5个运算符不能重载。

2301_76821799的博客 908

非常量引用的初始值必须为左值的问题

前言 前言 看了b站的黑马程序员C++中++运算符重载的章节后,里面的一个细节引起我的深思。。 一、问题 为什么这里不需要引用? 自己敲了代码后发现,如果是加了引用的<<运算符重载,后置++运算符测试中,出现问题。 当我把鼠标放到test2里最后一个myint对象上时,显示的类型是 乍看之下两者并无区别,经过一系列检验测试,我得到一个猜想(不知是否正确):因为MyInt 和 MyInt myint对象是不一样的。所以编译器里没有关于MyInt的“<<符”重载。 二、思考 那么是

ccy0806的博客 1045

c++中的运算符重载

在c++中我们输出一个变量时经常都使用cout<<变量<<endl;这个语句是定义了一个匿名对象,这种写法称为匿名函数对象,这样我们可以在不具体初始化一个对象便调用仿函数。输出对象中的属性是不被运行的,这个时候就可以使用左移运算符重载的操作。但是这个对象是在栈区创建的,一出栈就销毁了,所以这里应该返回值而不是引用,返回引用属于非法操作。为了方便前置++的连续使用,这里的返回值采用返回类的引用,也就是MyInteger &运行上面这段代码,我们会发现程序崩溃了,这是因为这里的赋值操作使用的是浅拷贝的操作。

2301_79491552的博客 839

【C++】类和对象-运算符重载&取地址&const成员函数

运算符重载和const成员函数

qq_40376612的博客 719

C++赋值重载和运算符重载(日期类)

注意:无显式调用时,编译器会自动生成默认赋值运算符重载,默认赋值运算符重载行为跟默认拷贝构造函数类似,对内置类型成员变量会完成浅拷贝。3.⼀个重载运算符函数是成员函数,则它的第⼀个运算对象默认传给隐式的this指针,因此运算符重载作为成员函数时,参数比运算对象少⼀个。2.⼀元运算符有⼀个参数,二元运算符有两个参数,二元运算符的左侧运算对象传给第⼀个参数,右侧运算对象传给第⼆个参数。的对象直接的拷贝赋值,这⾥要注意跟拷贝构造区分,拷贝构造用于⼀个对象拷贝初始化给另⼀个。注意以上5个运算符不能重载。

Augety_fly的博客 382
上一篇: iPhone为什么比Android好
下一篇: 程序员发展应该尽早明白13个道理
ErrorZero
博客等级 码龄14年 3粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值