关于++运算符前置和后置重载的实现实例:

 #include <iostream>
using namespace std;
//创建时钟类
class Clock
{
public:
Clock(int NewH=,int NewM=,int NewS=);//构造函数
void ShowTime();//显示时间函数声明
Clock& operator ++();//前置运算符重载
Clock operator ++(int);//后置运算符重载
//关于前置运算符的后置运算符的重载说明:如果后面的括号里带有形参则为后置单目运算符重载,或无形参则为前置单目运算符重载
private:
int Hour,Minute,Second;
};
//构造函数实现
Clock::Clock(int NewH,int NewM,int NewS)
{
if(<=NewH && NewH< && <=NewM&&NewM<&&<=NewS && NewS<)
{
  Hour = NewH;
  Minute=NewM;
  Second=NewS;
}
else
cout<<"Time error!"<<endl;
}
//显示时间函数实现
void Clock::ShowTime()
{
cout<<Hour<<":"<<Minute<<":"<<Second<<endl;
}
//前置单目运算符重载实现
Clock& Clock::operator ++()//前置单目运算符重载函数
{
Second++;
if(Second>=)
{
Second = Second-;
Minute++;
if(Minute>=)
{
Minute = Minute - ;
Hour++;
Hour=Hour%;
}
}
return *this;
}
//后置单目运算符重载实现
Clock Clock::operator ++(int)//后置单目运算符重载
{
Clock old = *this;
++(*this);
return old; //返回自加前的对象。
} void main()
{
Clock myClock(,,);
cout<<"First time output:";
myClock.ShowTime();
62
cout<<"Show myClock++:";
(myClock++).ShowTime();
65
cout<<"Show ++myClock:";
(++myClock).ShowTime();
}

  在程序中对运算符“++”进行了重载,使它能用于Clock类对象。“++”和“--”运算符有两种使用方式,前置自增运算符和后置自增运算符。它们的作用是不一样的,在重载时怎样区别这二者呢?针对“++”和“--”这一特点,C++约定:

在自增(自减)运算符重载函数中,增加一个int型形参,就是后置自增(自减)运算符函数。

请注意前置自增运算符“++”和后置自增运算符“++”二者作用的区别。前置重载是先自加,返回的是修改后的对象本身。后者返回的是自加前的对象,然后对象自加。重载后置自增运算符时,多了一个int型的参数,增加这个参数只是为了与前置自增运算符重载函数有所区别,此外没有任何作用。编译系统在遇到重载后置自增运算符时,会自动调用此函数。

CPP-基础:单目运算符重载的更多相关文章

  1. C++_基础_运算符重载

    内容: (1)输入输出运算符重载 (2)友元类和友元函数 (3)双目运算符重载 (4)单目运算符重载 (5)不能被重载的运算符 (6)只能定义为成员形式的运算符 1.输入输出运算符重载如: int n ...

  2. C++之运算符重载(1)

    在前一节中曾提到过,C++中运行时的多态性主要是通过虚函数来实现的,而编译时的多态性是由函数重载和运算符重载来实现的.这一系列我将主要讲解C++中有关运算符重载方面的内容.在每一个系列讲解之前,都会有 ...

  3. [转]C++之运算符重载(1)

    在前一节中曾提到过,C++中运行时的多态性主要是通过虚函数来实现的,而编译时的多态性是由函数重载和运算符重载来实现的.这一系列我将主要讲解C++中有关运算符重载方面的内容.在每一个系列讲解之前,都会有 ...

  4. C++:运算符重载函数之成员运算符重载函数

    5.2.3 成员运算符重载函数 在C++中可以把运算符重载函数定义为某个类的成员函数,称之为成员运算符重载函数. 1. 定义成员运算符重载函数的语法形式 (1)在类的内部,定义成员运算符重载函数的格式 ...

  5. C++:运算符重载函数之友元运算符重载

    5.2.2 友元运算符重载函数 运算符重载函数一般采用两种形式定义: 一是定义为它将要操作的类的成员函数(简称运算符重载函数): 二是定义为类的友元函数(简称为友元运算符重载函数). 1.定义友元运算 ...

  6. C++之运算符重载(2)

    上一节主要讲解了C++里运算符重载函数,在看了单目运算符(++)重载的示例后,也许有些朋友会问这样的问题.++自增运算符在C或C++中既可以放在操作数之前,也可以放在操作数之后,但是前置和后置的作用又 ...

  7. C/C++对bool operator < (const p &a)const的认识,运算符重载详解(杂谈)

    下面来进行这段代码的分析: struct node {  //定义一个结构体node(节点)    int x;    int y;    int len;   //node中有3个成员变量x,y,l ...

  8. C++关于运算符重载知识点

    1) 除了类属关系运算符".".成员指针运算符".*".作用域运算符"::".sizeof运算符和三目运算符"?:"以外 ...

  9. c++运算符重载---20

    原创博文,转载请标明出处--周学伟 http://www.cnblogs.com/zxouxuewei/ c++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程 ...

随机推荐

  1. ORM取数据很简单!是吗?

    简介 几乎任何系统都以某种方式与外部数据存储一起运行.大多数情况下,外部数据存储是一个关系数据库,并且在实现时通常将数据提取任务委托给某些 ORM. 尽管 ORM 包含很多 routine 代码,但是 ...

  2. 升级到Angular6后对老版本的RXJS代码做相应的调整

    还没有了解过RXJS6的童鞋,可以查看我的另外一篇博文,此篇博文主要是对于RXJS5升级到RXJS6的代码调整示例 RXJS5版本 在RXJS5上我们是这样写请求的 import 'rxjs/add/ ...

  3. mysql之SQL入门与提升(一)

    一.基本的增删改查 1.1首先建一张表 DROP TABLE IF EXISTS `websites`;CREATE TABLE `websites` ( `id` int(11) NOT NULL ...

  4. Rsync备份同步数据工具

    Rsync  is  a  fast and extraordinarily versatile file copying tool. Rsync是一款开源的,快速的,多功能的,可实现全量和增量的本地 ...

  5. C 语言实例 - 复数相加

    C 语言实例 - 复数相加 C 语言实例 C 语言实例 使用结构体(struct)将两个复数相加. 我们把形如 a+bi(a,b均为实数)的数称为复数,其中 a 称为实部,b 称为虚部,i 称为虚数单 ...

  6. Eclipse 修改编码方式

    1.修改全局(Eclipse默认)文本编码方式 2.修改某个工程编码方式 右键工程点击”属性“后,如下图

  7. Connected Components? Codeforces - 920E || 洛谷 P3452 &&bzoj1098 [POI2007]BIU-Offices

    https://codeforces.com/contest/920/problem/E https://www.luogu.org/problemnew/show/P3452 https://www ...

  8. ASP.NET经典的、封装好的ADO.NET类包

    using System; using System.Collections; using System.Collections.Specialized; using System.Runtime.R ...

  9. Java EE学习笔记(五)

    Spring事务管理 1.Spring事务管理概述 1).在实际开发中,操作数据库时都会涉及到事务管理问题,为此Spring提供了专门用于事务处理的API.(事务特性:ACID,原子性,一致性,隔离性 ...

  10. sftp 常用命令 以及 以及与 scp 的比较

    1.scp 不能容忍网络闪断,因此一旦出现网络闪断,那么scp 命令就会异常退出 sftp 可以容忍网络闪断,而且具备断电续传,因此sftp 适用于网络更慢的环境, 2. sftp 是一个交互式文件传 ...