1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 前缀++ 后缀++ 运算符重载

前缀++ 后缀++ 运算符重载

时间:2020-02-28 04:38:31

相关推荐

前缀++ 后缀++ 运算符重载

下面例子程序中 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),主要是为了区别前置版本,这个参数不会被使用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。