【C++面向对象】重载++操作符
来源:互联网 发布:秦美人神奇升级数据 编辑:程序博客网 时间:2024/05/21 12:38
本文主要讨论下C++中++操作符的重载问题,为什么专门把++提出来介绍下它的重载?不知道大家有没有思考过一个问题?一般情况下我们重载一个操作符时,只要定义一个重载函数"operator操作符()"即可,那么重载++和--这两个操作符怎么办,要知道++是要分为前++和后++的,如果单纯重载++操作符,怎么区分前++和后++?
C++中为了解决这个问题,采用了将后++定义成一个带有int型参数的形式,也就是说:
前++的重载函数:Integer&operator++ ();
后++的重载函数:constInteger operator++(int);
Integer使我们自定义的类,也就是需要为其实现重载函数的类,后++的重载形式利用了哑元,因为我们不会用到这个参数。好,列出本次试验的源代码:
#include<iostream>using namespace std;class Integer{ private: int m_i; public: Integer(int i):m_i(i){} void print() const { cout<<m_i<<endl; } Integer& operator++() { ++(this->m_i); return *this; } const Integer operator++(int) { Integer old=*this; ++(this->m_i); return old; }};int main(){ Integer i1(10),i2(100); (++i1).print(); (i2++).print(); return 0;}为了验证后++被编译器翻译成带参的重载函数的说法,我们先不着急运行,而是用g++ -S 选项生成cpp文件的汇编文件:
[Hyman@Hyman-PC Integer]$ g++ -S oper++.cpp [Hyman@Hyman-PC Integer]$ vim oper++.s[Hyman@Hyman-PC Integer]$ vim oper++.s
结果如下:
请注意图中红色圈出部分,分别对应main函数中调用函数过程,依次是:
1、 调用Integer的带参构造函数Integer(inti)构造i1;
2、 调用Integer的带参构造函数Integer(inti)构造i2;
3、 调用Integer的重载前++的函数operator++(),请注意编译器将operator++()的换名,换成了_ZN7IntegerppEv,最后一个字符v表示函数的参数为void,也就是我们重载的operator++()函数。
4、 调用Integer的print()函数。
5、 调用Integer的重载后++的函数operator++(int),本次编译器将operator++(int)的换名,换成了_ZN7IntegerppEi,最后一个字符i表示函数的参数为int,这也就足以证明了编译器直接将后++的重载函数翻译成了带int参数的形式。
6、 调用Integer的print()函数。
最后,我们再来看下运行结果:
[Hyman@Hyman-PC Integer]$ g++ oper++.cpp [Hyman@Hyman-PC Integer]$ ./a.out 11100结果正确,重载完成。
- C#——面向对象——重载操作符——重载运算符
- 【C++面向对象】自定义重载操作符
- 【C++面向对象】重载++操作符
- 【C++面向对象】[]操作符的重载
- C#——面向对象——重载操作符——装箱和拆箱
- C#——面向对象——重载操作符——自定义转换
- C++面向对象操作符重载:输入输出操作符
- C++面向对象软件开发--操作符重载
- C++面向对象编程<三>:操作符重载
- C++ 面向对象(二)—— 操作符重载
- C++ 面向对象(二)—— 操作符重载
- 【C++面向对象】输入输出操作符的重载
- 【C++面向对象】函数操作符()的重载
- C ++ 面向对象编程 运算符重载 双目
- C++面向对象操作符重载:调用操作符和函数对象
- C++面向对象操作符重载:算术操作符和关系操作符
- C++【操作符重载】
- c++::操作符重载
- Android 源码编译 libc++.so
- 牛顿法与拟牛顿法学习笔记(五)L-BFGS 算法
- mysql explain用法
- 数据库技术及应用
- php中fsockopen模仿post与get详解
- 【C++面向对象】重载++操作符
- LeetCode #377 - Combination Sum IV - Medium
- win7 x64 上安装theano
- 将App设置为设备的启动应用
- ViewPager和ListView
- Android--RecyclerView,SwipeRefreshLayout相关
- 阿里百川码力APP监控 来了!
- 冒泡、选择、插入、归并、快速排序代码
- Activity与intent