重载前置++运算符和后置++运算符
来源:互联网 发布:大禹装饰软件官方网站 编辑:程序博客网 时间:2024/06/05 05:42
运算符重载的主要目的是为了让用户自定义类型对象可以像普通数据类型一样能够进行加减乘除,自加自减等操作,非常直观方便。
在这里总结一下C++的++(分前置与后置)运算符的重载。自减运算符同理。关键就是如何通知编译器,让它知道哪个是前置版本,哪个是后置版本。
如何让编译器知道是前置还是后置呢?其实很简单,只要在重载操作符的形参中加上一个整数型参数,编译器就会自动将这个函数标示为后置,相应的不加则是前置。
(1)前置++运算符的重载方式:
成员函数的重载: 函数类型& operator++()
友元函数的重载:friend 函数类型& operator++(类类型& )
(2)后置++运算符的重载方式:
成员函数的重载:函数类型 operator++(int)
友元函数的重载:friend 函数类型 operator++(类类型&, int)
需要注意的一点是,后置++返回的是右值,所以返回类型不要再加&引用了。友元函数的重载和普通函数的重载是一样的。
下面我们来举几个例子。
1.枚举类型的前置++ 后置++
typedef enum {UP,DOWN,LEFT,RIGHT}Direction;//prefix ++Direction& operator++(Direction& dir){if(dir >= RIGHT)return dir;int temp = dir;dir = static_cast<Direction>(++temp);return dir;}//postfix ++Direction operator++(Direction& dir,int flag){if(dir >= RIGHT)return dir;Direction temp = dir;++dir;return temp;}
再来看最后一个例子,这个是与类有关的。注意,成员函数与友元函数的重载如果同时存在时,会先调用成员函数的重载,但是在++或--时,成员函数与友元函数的重载是不能同时存在的。下面这样写,在调用的地方会出现二义性错误的。这样写只不过是为了看着方便。
#ifndef INTEGER_HEAD_FILE#define INTEGER_HEAD_FILEclass Integer{public: Integer(int n); ~Integer(); Integer& operator++(); //member function prefix ++ Integer& operator++(int); //member function postfix ++ friend Integer& operator++(Integer& i);//friend function prefix ++ friend Integer& operator++(Integer& i, int);//friend function postfix ++private: int n_;};#endif//INTEGER_HEAD_FILE
#include "Integer.h"Integer::Integer(int n):n_(n){}Integer::~Integer(){}void Integer::Display() const{cout << n_ << endl;}//最好优先使用成员函数重载,//成员函数prefix ++Integer& Integer::operator++(){++n_;return *this;}//成员函数postfix ++Integer& Integer::operator++(int){ Integer tmp(n_); ++n_; return tmp;}//友元prefix ++Integer& operator++(Integer& i){ ++i.n_; return i;}//友元postfix ++Integer& operator++(Integer& i, int){ Integer tmp(i.n_); ++i.n_; return tmp;}
Done!
0 0
- 运算符前置++和后置++的重载
- 前置和后置++运算符的重载
- 重载前置++运算符和后置++运算符
- 前置和后置运算符
- ++运算符的重载前置与后置
- 对象前置++,前置--;后置++,后置--(没有利用《和》重载运算符)
- 运算符重载(前置/后置++、前置/后置--和+=/-=/-/+/=)
- 关于运算符 前置 ++ 和后置++ (--)
- 重载前置,后置(自增运算符 ++ 和自减运算符 --)
- 重载前置,后置(自增运算符 ++ 和自减运算符 --)
- 重载前置,后置(自增运算符 ++ 和自减运算符 --)
- C++运算符前置后置
- Time类中的运算符重载(3)-前置++,后置++
- C++前置++、后置++、不等号!及赋值运算符重载
- c加加+-*/前置++后置++运算符重载
- C++中前置++与后置++运算符重载
- [C++] C++的运算符重载(+、-、前置--、后置--,前置++,后置++、==)
- [C++] C++的运算符重载(+、-、前置--、后置--,前置++,后置++、==)
- Java使用memcached
- Linux下tar.gz文件解压缩命令
- 机器学习中的数学(3)-模型组合(Model Combining)之Boosting与Gradient Boosting
- mysql常用语句说明
- Windows环境下的NodeJS+NPM+Bower安装配置
- 重载前置++运算符和后置++运算符
- jquery如何调用自定义函数
- Android WebView动态更新图片
- 机器学习中的数学(4)-线性判别分析(LDA), 主成分分析(PCA)
- 深入理解计算机系统学习笔记(一)
- ios获取设备信息总结
- Android开发者的Ane简单入门——扩展XML文件不存在或者无效
- Using Beyond Compare with Version Control Systems under OSX
- ARM开发环境搭建(1)-J-Link烧写u-boot