前置和后置++运算符的重载

C++_类和对象_C++运算符重载_递增运算符重载_重载++运算符_前置++_后置++重载---C++语言工作笔记057 然后我们再来看这个递增运算符的重载. 我们知道,递增运算符,有前置++,和后置++,可以看到,上面写了 然后我们这次就自己定义一个int的类型,MyInteger,然后实现,递增,递减的操作. 首先我们去写个MyInteger类,我们给他个 private私有的m_Num变量. 然后我们写一个MyInteger的构造方法,给他一个0,这个初始化变量. 然后我们写个test01,去创建一个MyInteger的对象myint,然后输出 可以看到报错了. 我们去重载一下&l.. 阅读详情

首先是类的声明头文件:

在类的声明中,分别用了四个函数实现重载的不同方式,已标注,程序可和类定义中的相应函数配合实现相应的重载功能。

/******************************Integer.h***********************************/
#ifndef _INTEGER_H_
#define _INTEGER_H_

class Integer{
public:
        Integer() = default;       //执行默认
        Integer(int);
        ~Integer() = default;

        void display()const;

        /************************前置++运算符**************************/
        //Integer& operator++();               //成员函数重载
        //friend Integer& operator++(Integer&);       //友元函数重载

        /************************后置++运算符**************************/
        //Integer operator++(int);	       //成员函数重载,规定:后置++重载时,为和前置++区分,参数须写上int,或int val(变量名不固定)	
        friend Integer operator++(Integer&, int);     //友元函数重载
private:
        int m_nValue;
};

#endif

其次是类的定义,同样为配合上面的定义,具有四个函数的定义。

#include "integer.h"
#include <iostream>

Integer::Integer(int nValue)
        :m_nValue(nValue)
{
    
}

void Integer::display()const
{
        std::cout << m_nValue << std::endl;
}

#if 0

//前置++的成员函数重载,不含参数,因为这种方式默认含有对象自己
Integer& Integer::operator++()
{
        m_nValue++;
        return *this;
}

//前置++的友元函数重载
Integer& operator++(Integer& obj)
{
        obj.m_nValue++;
        return obj;
}

//后置++的成员函数重载,在重载后置++时,规定:为了区分它和前置++,参数须写上int,或者int val(val变量名自由定义)。
Integer Integer::operator++(int)
{
        Integer temp;
        temp.m_nValue = m_nValue++;
        return temp;
}
#endif

//后置++的友元函数重载,参数为int
Integer operator++(Integer& obj, int)
{
        Integer temp(obj.m_nValue);
        obj.m_nValue++;
        return temp;
}

其次,前置++和后置++的主要区别在于:前置++执行该命令=时变量立即+1,而后置++在执行完该条语句后才+1。所以后置++需要一个临时变量,将初值保存起来,在表达式中发挥相应的作用。

下面是测试程序:

#include "integer.h"

int main(int argc, char *argv[])
{
        Integer n1(10);
        n1.display();

        Integer n2 = ++n1;
        n2.display();
        n1.display():

        Integer n3 = n1++;
        n3.display();
        n1.display();

        return 0;
}




setoolkit克隆网站获取用户信息 一、环境 kali、DVWA 二、步骤 首先打开kali,输入setoolkit 依次选择选项1-选项2-选项3-选项2 输入钓鱼网站的网址(默认为本地网址) 输入要克隆的网址URL 这里我的网址如图,将网址复制 然后模拟攻击场景,攻击者向受害者发送了一条钓鱼链接,此链接与DVWA的登陆页面完全一样,受害者点击之后并进行登陆信息 点击login之后,用户信息就被setool... 阅读详情

相关推荐

C#与工业设备的OPC DA/UA协议通信开发

摘要:本文介绍了C#与工业设备通信的两种OPC协议(OPC DA和OPC UA)的实现方法。OPC DA基于COM/DCOM技术,适用于Windows平台,提供实时数据采集功能;OPC UA则支持跨平台通信,具备更强的安全性和数据建模能力。文章详细展示了如何使用C#通过OPC DA和OPC UA协议读取、写入数据,并提供了代码示例,包括安装相关库、建立连接、订阅数据变化等关键步骤。这些方法为工业自动化中的设备监控与控制提供了实用解决方案。(149字)

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1259

【C++】C++运算符重载(成员函数实现、友元函数实现)

运算符重载 对于面向对象的程序设计来说,运算符重载可以完成两个对象之间的复杂操作,比如两个对象的加法、减法等。运算符重载的原理是:一个运算符只是一个具有特定意义的符号,只要我们告诉编译程序在什么情况下如何去完成特定的操作,而这种操作的本质是通过特定的函数完成的。 重载运算符 为了重载运算符,首先要定义运算符重载函数,它通常是类的非静态成员函数或者友元函数,运算符的操作数通常也应为对象。 定...

Yngz_Miao的博客 2万+

ARM芯片内部的高速公路:手把手教你用AMBA Designer配置NIC-400互连控制器

本文详细介绍了如何使用AMBA Designer工具配置ARM芯片中的NIC-400互连控制器,涵盖从基础拓扑构建到高级QoS设置的完整流程。通过实际案例演示,帮助开发者掌握AXI协议下的高效片上网络设计,提升SoC性能与能效比。

weixin_26750481的博客 310

C++基础——前后置++--,流插入提取运算符重载函数

C++ 前后置++、--、运算符的重载函数讲解

weixin_69283129的博客 3065

Goose开源程序本地机上 AI 代理,能够从头到尾自动执行复杂的开发任务。Goose 不仅可以提供代码建议,还可以自主构建整个项目、编写和执行代码、调试故障、编排工作流程以及与外部 API 交互

Goose开源程序 是您的本机上 AI 代理,能够从头到尾自动执行复杂的开发任务。Goose 不仅可以提供代码建议,还可以自主构建整个项目、编写和执行代码、调试故障、编排工作流程以及与外部 API 交互。无论您是在构建想法原型、优化现有代码,还是管理复杂的工程管道,goose 都能适应您的工作流程并精确执行任务。

struggle2025的博客 2041

C++开发基础之掌握常用的三种异步编程模型

以上是三种常见的C++异步编程模型,每种模型都有其适用的场景和特点。根据具体需求,你可以选择合适的模型来进行异步编程。

dotnet研习社 2175

【C++】运算符重载 ⑦ ( 一元运算符重载 | 后置运算符重载 | 使用 全局函数 实现 后置 ++ 自增运算符重载 | 使用 成员函数 实现 后置 -- 自减运算符重载 )

一、后置运算符重载 1、使用 全局函数 实现 后置 ++ 自增运算符重载 2、使用 成员函数 实现 后置 -- 自减运算符重载 二、完整代码示例

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 761

使用再生龙还原镜像文件到硬盘

1. 把制作好的再生龙光盘插入需要的电脑,开机按F4使用再生龙启动2. 选择默认的:Clonezailla live(Default settings,VGA 800*600),然后等待几分钟 3. 选择语言:简体中文 4. 选择不修改键盘映射 5. 选择使用再生龙          6. 选择硬盘/分区(存到/来自)镜像文件,此选项既可以制作镜像,也可以恢复镜像。 7. 使用本机的分区     ...

weixin_42168893的博客 1万+

【C++】之类和对象 - 运算符重载

【C++】运算符重载详解,赋值/前后置++/流输入输出

Hello_World_213的博客 1023

盘点军工行业软件研发的那些常用GJB标准

GJB5000、2786、438、141、102、8114等...

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 9442

【ESD专题】从原理上分析TVS管PCB Layout的经验法则

我们常常会听到的一些经验法则,按这些经验法则去做,一般也不会有什么问题,但是到底是为什么呢? 没有从原理上分析和证明的时候,往往在Layout之后还要担心实际测试结果怎么样。或是在实际测试出问题后,根本无法进行分析,难道说修改一个版本就好了?那要从哪里修改呢?也无从下手呀。...

一点硬件 1446

c++运算符前置++与后置++的重载的区别 学习笔记

重载

记录学习过程 2662

【C++】ROS:ROS1环境配置与基础示例

ROS1环境配置与基础示例

DevFrank的博客 2103

重载前置++运算符和后置++运算符

运算符重载的主要目的是为了让用户自定义类型对象可以像普通数据类型一样能够进行加减乘除,自加自减等操作,非常直观方便。 在这里总结一下C++的++(分前置与后置)运算符的重载。自减运算符同理。关键就是如何通知编译器,让它知道哪个是前置版本,哪个是后置版本。 如何让编译器知道是前置还是后置呢?其实很简单,只要在重载操作符的形参中加上一个整数型参数,编译器就会自动将这个函数标示为后置,相应的不加则是

五月花 5525

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C++:前置++和后置++运算符重载

前置++(先自加,再参与运算): //前置++运算符重载 person& operator ++() { this->m_a++; return *this; } 后置++(先参与运算,再自加): //后置++运算符重载,注意需要加int来与前置++重载做区分,语法这样规定。 person operator ++(int) //为什么返回值不用引用,因为不可以返回局部变量 { person temp = *this; ...

weixin_41712487的博客 7567

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

前置++和后置++运算符重载的区别(详细)

前置++和后置++的区别及原因详解 返回类型不同、形参不同、代码不同、效率不同、返回值类型的区别等

要好好学习 2333

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

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

糖炒栗子 983

C++学习系列(7)——详解操作符重载(运算符重载、赋值运算符重载、前置++和后置++重载深入解读)

深入解读C++操作符重载的知识,包括运算符重载,赋值运算符重载以及难以理解的前置++、后置++的重载,相信看完这篇文章你一定对操作符重载有个清晰的认识。

沈同学的博客 2858

C++ 运算符重载实战:彻底搞懂前置++ 和 后置++ 的区别!

本文详细讲解了C++中前置++和后置++运算符重载的区别与实现。关键点包括:1)前置++返回引用且效率高(MyInteger& operator++());2)后置++返回临时对象(MyInteger operator++(int))并通过int参数区分;3)性能差异说明为何推荐使用++i。文章通过MyInteger类的完整示例代码,展示了两种++运算符的具体实现方式、调用区别及输出结果,并总结了返回类型和效率差异的黄金法则。最后提醒注意链式操作和性能优化的使用场景。

在读大学生 627

重载单目运算符(以++为例,前置和后置)

有一个time 类,包括数据成员minute ,sec模拟秒表,每次走一秒,满60秒进一分钟,此时秒从0起算 #include <iostream> using namespace std; class Time { private ://私有数据成员 int sec;//秒 int minute;//分 public://公有数据 Time () { minute=0; sec=0; }//默认构造函数初...

weixin_62802660的博客 1087

c++ 学习 之 运算符重载 之 前置++和后置++

上面样例中,前置 ++ 返回的是引用,所以a 的值变成了3后置 ++ 返回的不是可以改变的左值,所以有问题。

wniuniu_的博客 544

C++ 如何重载前置++和后置++运算符

参考链接:点击打开链接注意一下几点: 1、前置++重载时没有参数,而后置++重载时有参数。不会使用其参数,仅仅是区分用。可以理解为前置++后面有参数了,所以不需要参数 2、前置++需要返回引用,因为重载自加运算符后可以返回对象的引用, 以方便在表达式中连续使用。而后置++返回的不是引用,所以不能进行连续使用。3.后置运算符返回的值是temp,需要注意。因为是后加。实现代码如下:#include&l...

qq_29762941的博客 8071

重载运算符——前置++和后置++

1&gt;为区别前置和后置运算符,需要在后置运算符函数中加参数“int”,虽然这个类型在此除了以示区别之外并不代表任何实际含义; 2&gt;前置返回的是变量的引用,后置返回的是常量。所以++++c合法,而c++++不合法,这一点可以在VC 6.0和DEV C++中采用基本数据类型的++操作来验证; 3&gt;为什么不让c++++也合法呢?如果要实现c++++合法,必须使后置返回变量或变量的引用。c...

kuniqiw的博客 1495

C++类和对象(中) 之 【运算符重载、赋值运算符重载、前置++与后置++、const成员、取地址及const取地址操作符重载】

时,往往会遇到。

zl_dfq的博客 911

C++重载前置和后置++运算符

本文用具体的对象样例对于前置++运算符和后置++运算符进行了解释,希望能够帮助到大家

CrazyRabbitttt 3024

C++之运算符重载(前置++和后置++)

今天在阅读《google c++ 编程风格》的文档的时候,5.10. 前置自增和自减:有一句话引起了我的注意: 对于迭代器和其他模板对象使用前缀形式 (++i) 的自增, 自减运算符.,理由是 前置自增 (++i) 通常要比后置自增 (i++) 效率更高。于是我查了查前置++和后置++的区别。 注意:《more effective c++》条款8也专门叙述了问题。后来我发现,下面的文章基本就是...

weixin_34320724的博客 740

重载前置,后置(自增运算符 ++ 和自减运算符 --)

如何重载增量运算符 ++ 和 --运算符++和--有前置和后置两种形式,如果不区分前置和后置,则使用operator++( )或operator--( )即可;否则,要使用operator++( )或operator--( )来重载前置运算符,使用operator++(int)或

游戏开发 1万+
上一篇: 二叉树的创建与前序遍历(递归方式)
下一篇: 深入理解指针、指向数组的指针和数组名的的区别
FreeeLinux
博客等级 码龄11年 421粉丝 356原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值