前缀++ 后缀++ 运算符重载
下面例子程序中 const Fraction operator ++(int) 中
int不过是个哑元(dummy),是永远用不上的
它只是用来判断++是prefix 还是 postfix
记住,如果有哑元,则是postfix,否则,就是prefix
就像其他的一元算法和逻辑运算一样
而其实在C++中用到这种哑元的也只有在postfix ++ 和--了
例子:
int i=10;
cout<<i++<<endl; //i=11;后缀加;先返回后自增; 10
cout<<++i<<endl; //i=12;前缀加;先自增后返回; 12
例:
#include<iostream>
using namespace std;
class Fraction //数类;
{
friend ostream& operator<<(ostream& out, const Fraction& x);
private:
int den; //加的步进距离,使自加的距离不是1;
int num; //数(初值);
public:
Fraction(int d=1, int n=0):den(d),num(n) {}
Fraction& operator++() //前缀自加重载;(前置版本prefix)
{
num+=den; //先自增,再返回;
return *this;
}
const Fraction operator ++(int) //后缀自加重载;(后置版本postfix)
{
Fraction old (*this); //拷贝构造(对象参数是对象)。先返回,再自增;
++(*this); //调用的是重载的前置版本;
return old;
}
};
ostream& operator<<(ostream& out, const Fraction& x)
{
out<<x.num<<endl;
return out;
}
int main()
{
Fraction b(10,10);
cout<<b++<<endl;
cout<<++b<<endl;
return 0;
}
前置版本返回一个引用【Fraction& operator++()】,后置版本返回一个const值【const Fraction operator ++(int)】。
后置版本是利用前置版本来实现的。节约代码,控制代码有余。
前置版本的效率高,因为后置版本需要调用前置版本,所有后置版本效率比前置要低。(++i比i++效率高。)
在后置版本里,人为添加一个参数(int),主要是为了区别前置版本,这个参数不会被使用。
前缀++ 后缀++ 运算符重载相关推荐
- C++中的运算符重载
1.Cpp中的重载运算符和重载函数 C++允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载.重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但 ...
- 复习笔记(六)——C++运算符重载(难点)
运算符重载 运算符重载的概念 运算符重载类似于函数重载. 运算符重载允许把标准运算符(如+.-.*.<等)应用于定制数据类型的对象. 什么情况下需要考虑运算符重载? 需要用运算符操作自定义类的对 ...
- C++运算符重载讲解与经典实例
转自:http://blog.csdn.net/dingyuanpu/article/details/5852825 C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型 ...
- C++学习笔记:(四)运算符重载 类型转换
目录 6.运算符重载 6.1运算符重载的基本概念 6.2成员函数重载运算符 6.3友元函数重载运算符 6.4成员函数重载运算符和友元函数重载运算符比较 6.5类型转换 6.运算符重载 面向对象程序设计 ...
- 【C++学习笔记四】运算符重载
当调用一个重载函数和重载运算符时,编译器通过把您所使用的参数类型和定义中的参数类型相比较,巨鼎选用最合适的定义.(重载决策) 重载运算符时带有特殊名称的函数,函数名是由关键字operator和其后要重 ...
- i++ 和 ++i 效率的分析以及自定义类型的自增/自减运算符重载实例
From: http://blog.csdn.net/leo115/article/details/8101541 我们通常在写for循环 的时候,要实现变量 i 的自增 1 :往往会在i++ 和++ ...
- C++学习笔记(10)运算符重载,友元函数,友元类
c++允许我们为运算符定义专门的函数,这被称为运算符重载: 运算符可以简化字符串的操作,'+',以及使用关系运算符比较字符串,[ ]运算符访问向量中的元素: 例如: #include <iost ...
- 【C++】运算符重载关于const的分析(超详细)
C++运算符重载 重载运算符"+" 第1个const 第2个const 第3个const 重载运算符"-" 重载运算符"-"(与上面的含义不 ...
- C#编程(四十)----------运算符重载
运算符重载 所谓的运算符重载是指允许用户使用用户定义的类型编写表达式的能力. 例如,通常需要编写类似与以下内容的代码,入江两个数字相加,很明显,sum是两个数字之和. int i=5,j=4; int ...
最新文章
- 从零开始一起学习SLAM | 理解图优化,一步步带你看懂g2o代码
- 【行业】十张图告诉你传统企业与互联网怎样融合
- MyBatis关联查询,表字段相同,resultMap映射问题的解决办法
- [Swift]LeetCode859. 亲密字符串 | Buddy Strings
- LeetCode 1124. 表现良好的最长时间段(单调栈/哈希)
- C++ Primer 第11章 习题11.16
- java 按位_Java中的按位运算
- 学习图(最短路径)算法
- java mysql 订单表设计
- 英特尔固态硬盘测试软件,AS SSD测试:IOPS值高达11万_Intel 520_固态硬盘评测-中关村在线...
- 服务器返回的常见http状态码
- php连接mysql 500错误日志_php javascript从mysql获取数据会在服务器端产生500错误
- 英语和数学不好,能学编程吗?
- 鸟哥的Linux私房菜 命令笔记2
- 半导体放电管TSS详解
- 互联网日报 | iPhone 12系列手机正式发布;盒马入局火锅市场;东风汽车A股IPO申请获受理...
- linux系统管理技术学习
- windows 下使用github客户端报错:Failed to publish this branch
- [人脸活体检测] 论文:Face De-Spoofing: Anti-Spoofing via Noise Modeling
- 力扣第1219题:黄金矿工(回溯)
热门文章
- js(Dom+Bom)第七天(2)
- Lucene全文检索过程
- bzoj2588: Spoj 10628. Count on a tree(树上第k大)(主席树)
- easyui datagrid 列拖动
- WebApp匯入資料之From Excel
- Codeforces Round #554 Div.2 E - Neko and Flashback
- python 中cPickle学习二
- 玩转iOS开发:NSURLSession讲解(三)
- 理解Javascritp中的引用
- JAVA Drp项目实战—— Unable to compile class for JSP 一波三折