运算符重载函数相当于类来说有两种存在方式:
1.重载为类的成员函数。
2.重载为类的友元函数。

重载为类的成员函数。

  如果把运算符重载为类的成员函数,则该函数么须通过对象调用,该对象就是运算符的其中一个操作数,在运算符重载函数中通过this指针隐含(或显式)地访问对象的成员。
如果把双目运算符重载为类的成员函数,则该运算符有两个操作数,左操作数是调用运复符重载函数的对象,而右操作数作为运算符重载函数的实参传递到运算符重载函数中双目运算符重载为类的成员函数时,其调用的一般格式如下:
**左操作数  运算符  右操作数;**
编译器把它解释为
**左操作数.operator 运算符(右操作数);**
即左操作数是调用运算符重载函数的对象,右操作数作为函数的参数。

例如,表达式“sl>=s2”相当于“s1. operator>=(s2)”

 如果把单目运算符重载为类的成员函数,则该运算符只有一个操作数,即调用运算符重载函数的对象本身。单目运算符重载为类的成员函数时,要区分前置运算符与后置运算符如果是前置运算符,则运算符重载函数没有参数。其调用格式如下:**运算符  操作数;**编辑器把它解释为**操作数.operator 运算符();**


注意:
如果是后置运算符,运算符重载函数需要一个整型参数,*但该参数不起任何作用,仅用来标识该运算符是后置运算符。*其调用格式如下:
操作数 运算符;
编译器把它解释为
操作数 operator 运算符 (int)
下面通过一个示例,演示重载自增运算符的方法,实现自定义Time类对象 t的自增运算运算规则则是把当前对象t的秒数加一。

#include<iostream>
using namespace std;
class Time
{
public:Time(int h = 0, int m = 0, int s = 0){hour = h;minute = m;second = s;}Time operator++ ();Time operator++ (int);void show();private:int hour;int minute;int second;};Time Time::operator++()//实现前置自增
{second++;if (second == 60){minute++;second = 0;}if (minute == 60){hour++;minute = 0;}hour %= 24;return *this;Time Time::operator++(int)//实现后置自增{Time t = *this;++(*this);return t;}void Time::show(){cout << hour << ":" << minute << ":" << second << endl;}int main(){Time t;t.show();Time t1;t1 = t++;t1.show();t.show();t1 = ++t;t1.show();t.show();return 0;}
}

本例实现前置自增及后置自增运算,前置自增函数不带参数,后置自增函数带一个int类型的参数,这里的int仅用于区别前置自增,在函数调用时不带参数。本程序值得读者借鉴的地方是在实现后置自增时直接调用了已经实现的前置
自增运算符。从结果来看,后置自增运算表式保留了对象自增之前的值,并且对象实现了自增;前置自增运算实现了对象的自增,并且表达式的值是对象自增之后的值。这与算术运算中自增运算符的功能是吻合的。

重载为类的友元函数。

运算符重载函数可以实现为类的成员函数,也可以实现为类的友元函数。运算符的左操作数如果不是当前类的对象,那么该运算符就不能声明为类的成员函数只能声明为类的友元函数。在类中对运算符重载函数进行友元函数的声明格式如下:
friend 类型说明符 operator 运算符 (参数列表);
类的友元函数不能通过对象进行调用,所以运算符的操作数全部作为运算符重载函数
的实参传递到运算符重载函数中。双目运算符重载函数重载为类的友元函数时的调用格式
如下:
做操作数 运算符 右操作数;
编译器把它解释为
operator 运算符 (左操作数,右操作数);

c++中运算符重载方式中你易遗漏的小细节相关推荐

  1. C++中运算符重载需要遵循的规则

    一.C++中运算符重载需要遵循的规则 1.并不是所有的运算符都可以重载.能够重载的运算符包括: + - * / % ^ & | ~ ! = < > += -= *= /= %= ^ ...

  2. 【C++面向对象】C++中运算符重载的两种方式

    我们知道在C++中可以通过重载运算符的方式,使类实现类似于基本类型的运算符操作,如+.-.*./等等.本文介绍这种重载运算符的两种方法. 我们先自定义一个类,来作为本次研究的对象: class Int ...

  3. c++运算符重载中很多人易忘的小细节

    运算符重载的基本格式 运算符重载的本质就是函数重载 类型说明符 operator 运算符 (参数列表) { 函数体://实现运算符功能的代码. } 如果把 operator运算符"看作一个整 ...

  4. c++中运算符重载(加号运算,左移运算,前置后置++运算符,赋值运算,关系运算,函数运算)

    运算符重载注意 重载的运算符要易读 内置的数据类型的表达式的运算符是不可以改变的 不要重载&& 和 | | 运算符 =,[]和->运算符只能通过成员函数进行重载 << ...

  5. c++中 运算符重载 const 函数

    概要 本篇文章主要内容是关于运算符重载,然后在最后提了一下 const修饰函数时的状况.后面会补上一个日期类的定义. 文章目录 概要 赋值运算符的重载 = 号的重载 i++ 和 ++i 前置与后置++ ...

  6. C++运算符重载(复数中除法(“/”)数学运算公式)

    假设x为实部,y为虚部. 定义复数A,复数B,复数t: t.x=((A.x*B.x)+(A.y*B.y))/((B.x*B.x)+(B.y*B.y));     t.y=((A.y*B.x)-(A.x ...

  7. java 两个运算符重载_Java中的操作符重载

    0.Java操作符重载 Java中我们可以执行如下语句: String fullName = "hongliang "+"cao"; System.out.pr ...

  8. C++中运算符重载的方法

    **#include<iostream> using namespace std; class Complex{ public:Complex(){real=0;imag=0;}Compl ...

  9. 关于c++中运算符重载

    通俗的讲,运算符重载就是把运算符赋予新的功能,比如说 + 有整数相加 浮点数相加的功能,但是没有复数相加的功能,这时我们通过运算符重载,使得 + 具有复数相加的功能,这就叫做运算符重载,本质上, 运算 ...

最新文章

  1. C++_STL——queue(and priority_queue)
  2. 第十六届全国大学生智能汽车竞赛 讯飞智慧餐厅组别 全国选拔赛成绩公布说明
  3. 问题集锦(52-53)
  4. CentOS开启与关闭防火墙
  5. R语言——导入Excel表格数据方法
  6. webdynpro view navigation - the same as Webclient UI
  7. ASP.NET Core 中间件的几种实现方式
  8. 开源不止,前进不息:2018 OpenInfra Days China来了!
  9. 计算机毕设最快多长时间,大学几年快结束了,计算机毕设到底该怎么做?
  10. 栈应用:后缀表达式求值
  11. MRFC-概念与功能
  12. 阶段3 2.Spring_07.银行转账案例_8 基于接口的动态代理回顾
  13. QTouch手机组态软件APP
  14. python数独解题器_python-2.7 – 数独生成器
  15. 数据库原理及应用实验:数据库安全性控制
  16. 小马激活工具出现Cannot open file k:\OEMSF 的解决方法
  17. 类似于wps的linux软件,出了Office、WPS还有哪些好用的办公软件?
  18. 【统计学笔记】如何判断变量间相关关系,并建立一元线性回归模型?
  19. Linux命令学习之五
  20. UE4之生成pak文件

热门文章

  1. 数据挖掘(Data mining、资料探勘、数据采矿)(情报检索、数据分析、模式识别)
  2. 【中级软考】什么是二维数组元素的偏移量?(就是把数组ravel[拉平]后存到内存中的元素位置)
  3. Python 程序扩展名(py, pyc, pyw, pyo, pyd) 及发布程序时的选择
  4. Tensorflow pipeline是什么?
  5. python matplotlib二维平面等高线的绘制, plt.contour 与 plt.contourf, plt.clabel和plt.colorbar, plt.xticks([])
  6. Ubuntu16.04安装ROS时,sudo rosdep init报错,Error: cannot download default sources list from:
  7. 天梯赛 L1-023 输出GPLT (20 分)
  8. systemctl常用命令
  9. 智能胖墩机器人_探班新雅CDIE | 智能硬件“奇幻乐园”
  10. Java判断工作日计算,计算随意2个日期内的工作日