`
wangxiaohigh
  • 浏览: 1429926 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

下面例子程序中 const Fraction operator ++(int) 中
int不过是个哑元(dummy),是永远用不上的
它只是用来判断++是prefix 还是 postfix
记住,如果有哑元,则是postfix,否则,就是prefix
就像其他的一元算法和逻辑运算一样
而其实在C++中用到这种哑元的也只有在postfix ++ 和--了

例子:

int i=10;
cout<<i++<<endl;<wbr><wbr><wbr>//i=11;后缀加;先返回后自增;<wbr><wbr>10<br> cout&lt;&lt;++i&lt;&lt;endl;<wbr><wbr><wbr>//i=12;前缀加;先自增后返回;<wbr><wbr>12</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

例:

#include<iostream>
using namespace std;

class Fraction<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>//数类;<br> {<br><wbr>friend ostream&amp; operator&lt;&lt;(ostream&amp; out, const Fraction&amp; x);<br> private:<br><wbr>int den;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>//加的步进距离,使自加的距离不是1;<br><wbr>int num;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>//数(初值);<br> public:<br><wbr>Fraction(int d=1, int n=0):den(d),num(n) {}<br><wbr>Fraction&amp; operator++()<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>//前缀自加重载;(前置版本prefix)<br><wbr><wbr>{<br><wbr><wbr><wbr>num+=den;<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>//先自增,再返回;<br><wbr><wbr><wbr>return *this;<br><wbr><wbr>}<br><wbr>const Fraction operator ++(int)<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>//后缀自加重载;(后置版本postfix)<br><wbr><wbr>{<br><wbr><wbr><wbr>Fraction old (*this);<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>//拷贝构造(对象参数是对象)。先返回,再自增;<br><wbr><wbr><wbr>++(*this);<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>//调用的是重载的前置版本;<br><wbr><wbr><wbr>return old;<br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

分享到:
评论

相关推荐

    C语言 重载运算符和重载函数.pdf

    重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。 当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数...

    详解C++ 重载运算符和重载函数

    重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。 当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数...

    C++ 重载运算符和重载函数

    C++ 重载运算符和重载函数 C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数...

    解析C++中不能重载为友元函数的四个运算符

    现在先说说赋值运算符“=”的重载C++规定赋值运算符“=”只能重载为类的非静态成员函数,而不可以重载为类的友元函数。不能重载为类的静态成员应该比较容易理解,因为静态成员函数是属于整个类的,不是属于某个对象...

    C++程序设计实验6.doc

    为该类重载运算符+,-(友元函数),前置和后置++,-- (成员函数),插入符和提取符,&gt;&gt;(友元函数)。在main函数里定义复数对象,测 试重载的这些运算符。 2.进阶部分 (2)设计一个mystring类,包括数据成员char ...

    c++ 运算符重载和方法重载

    字符串相关操作: strcpy(s1,s2)复制s2为s1; strcmp(s1,s2)比较s1和s2字符串内容是否相同 strcat(s1,s2)拼接字符串,把s2拼接在s1的末尾 strchr(s1,ch)找到s1这个字符...const修饰的取地址运算符重载 析构

    C++中运算符重载的规则语法实例

    之前就知道运算符的重载就是将它重新定义,给它新的功能,为的式符合程序员的要求,一个例子就是,要将坐标相加,但是电脑不知道怎么相加,于是聪明的人就赋予了“+”新的定义。然而一些严格意义上的用法还不是很...

    C++运算符重载实例代码详解(调试环境 Visual Studio 2019)

    遇到很多运算符重载,为了方便我的学习,我把这些总结了一下 如有错误(包括之前的博文)请评论留言,谢谢! 由于代码里注释的很清楚,我就不做过多的解释了。 下面是这次总结的头文件,用来放置一些类和方法。 //...

    面向对象与C++试题.doc

    (2)写出对运算符“+”、“”、“&gt;&gt;”进行重载的运算符重载函数的定义。 2、(17分)下列Base类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则是一个通用的用以求不同形状的图形面积总和的函数。 ...

    大数(整数类封装)很早之前从其他人那里获得的。

    来源于某ACM题,具体来源记不清了。 整型大数封装,四则运算,乘方,位移,比较,转换,读写,运算符重载。

    C++简单集合类的实现方法

    重载+运算符,用以实现集合的求并集运算  4.重载*运算符,用以实现集合的求交集运算  1.类的整体设计 该问题需要模拟实现集合类,我们可以使用数组来模拟集合,于是使用int items[100]用来存放集合中的数据。为了...

    零起点学通C++多媒体范例教学代码

    11.8 重载加法运算符函数operator+ 11.9 重载赋值运算符函数operator 11.10转换类型运算符 11.10.1 温习调用构造函数实现的类型转换 11.10.2 通过构造函数将变量转换为一个对象的成员变量 11.10.3 通过operator...

    零起点学通C++学习_多媒体范例教学代码

    11.8 重载加法运算符函数operator+ 11.9 重载赋值运算符函数operator 11.10转换类型运算符 11.10.1 温习调用构造函数实现的类型转换 11.10.2 通过构造函数将变量转换为一个对象的成员变量 11.10.3 通过operator...

    C++初学者指南(原版)

    此模块简要概述几个 C++ 功能,包括 C++ 程序的一般形式、一些基本控制语句和运算符。它不会介绍太多细节,而会重点介绍对所有 C++ 程序都通用的一般概念。 第 2 章:数据类型和运算符简介 编程语言的核心在于其数据...

    自考04747《Java语言程序设计(一)》简答题全集.doc

    类封装了一类对象的状态和方法 〔1分〕 类是用来定义对象的模板 〔1分〕 类的实现包括两部分 类声明和类体 〔1分〕 16、 什么是方法重载 方法重载是指,一个类中可以有多个方法具有相同的名字和类型 〔2分〕 但这些...

    最新自考04747《Java语言程序设计(一)》简答题全集资料.doc

    类封装了一类对象的状态和方法 (1分) 类是用来定义对象的模板 (1分) 类的实现包括两部分 类声明和类体 (1分) 16、 什么是方法重载 方法重载是指,一个类中可以有多个方法具有相同的名字和类型 (2分) 但这些...

    如何使用C++实现一个简单的集合类?

     重载+运算符,用以实现集合的求并集运算  重载*运算符,用以实现集合的求交集运算  1.类的整体设计  该问题需要模拟实现集合类,我们可以使用数组来模拟集合,于是使用int items[100]用来存放集合中的数据...

    基于C++实现(控制台)学校人员信息系统【100010113】

    在switch结构程序的每个部分执行操作后,应返回到之前一样的菜单屏幕。我认为在每个case之后使用goto而不是break,尽管被认为是不好的编码风格,但是使用goto不在循环内,我觉得它是可以接受的。但首先,程序应该...

    语言程序设计课后习题答案

    由于图形用户界面的应用,程序运行由顺序运行演变为事件驱动,使得软件使用起来越来越方便,但开发起来却越来越困难,对这种软件的功能很难用过程来描述和实现,使用面向过程的方法来开发和维护都将非常困难。...

Global site tag (gtag.js) - Google Analytics