1、

当一个重载的运算符是成员函数时,this绑定到左侧运算对象。成员运算符函数的(显式)参数数量比运算对象的数量少一个。

通常情况下,不应该重载逗号、取地址、逻辑与和逻辑或运算符。

关于重载运算符的返回类型(应与其内置版本的返回类型兼容):

逻辑和关系运算符应该返回bool,算术运算符应该返回一个类类型,赋值运算符和复合赋值运算符应该返回左侧运算对象的一个引用。

关于将运算符定义为成员函数还是普通的非成员函数的抉择:

  • 赋值、下标、调用()、成员访问箭头运算符必须是成员。
  • 复合赋值一般应为成员,非必须。
  • 改变对象状态或者与给定类型密切相关的运算符(如递增、递减、和解引用等),通常为成员。(如 %= 、++)
  • 具有对称性的运算符可能转换为任意一端的运算对象(如算术、相等性、关系和位),因此通常应该是普通的非成员函数。

重载与内置运算符的区别:重载必须具有至少一个class或者枚举类型的操作数;重载不保证求值顺序(如短路特性)

相同点:优先级、结合性、操作数的数目都不变。

2、

IO运算符,必须将其定义成非成员函数。IO运算符通常需要读写类的非公有数据成员,IO运算符一般被声明为友元。

3、

如果类同时定义了算术运算符和相关的复合赋值运算符,则通常情况下应该使用复合赋值来实现算术运算符。

4、

赋值运算符

5、

下标运算符:如果一个类包含下标运算符,则它通常会定义两个版本:一个返回普通引用,另一个是类的常量成员并且返回常量引用。

6、

递增和递减运算符:

为了与内置版本保持一致,前置运算符应该返回递增或递减后对象的引用。

后置运算符应该返回对象的原值(递增或递减之前的值),返回的形式是一个值而非引用。

区别前置与后置的方式:后置版本接受一个额外的(不被使用)int类型的形参。若通过函数调用的方式调用后置版本,则必须为它的整形参数传递一个值。

7、

成员访问运算符:

重载的箭头运算符必须返回类的指针或者自定义了箭头运算符的某个类的对象。

8、

函数调用运算符:

lambda是函数对象:默认情况下lambda不能改变它捕获的变量。因此默认情况下,lambda产生的类当中的函数调用运算符是一个const成员函数。若lambda被声明为可变的,则调用运算符就不是const的了。

表示lambda及相应捕获行为的类:引用捕获,值捕获(变量拷贝)

lambda表达式产生的类不含默认构造函数、赋值函数及默认析构函数。是否含有默认的拷贝/移动构造函数则通常要视捕获的数据成员类型而定。

标准库定义的函数对象:

//统计大于1024的值有多少个
count_if(vec.begin(), vec.end(), bind2nd(greater<int>(), 1024));
//找到第一个不等于pooh的字符串
find_if(vec.bein(), vec.end(), bind2nd(not_equal_to<string>(), "pooh"));
//将所有值乘以2
transform(vec.begin(), vec.end(), vec.begin(), bind2nd(multiplies<int>(), 2));

标准库function类型

//简单的桌面计算器 处理int二元运算
#include<iostream>
#include<map>
#include<algorithm>
#include<functional>
using namespace std;map<string, function<int (int, int)>> binOps = {{ "+", plus<int>() },{ "-", minus<int>() },{ "*", multiplies<int>() },{ "/", divides<int>() },{ "%", modulus<int>() }
};int main()
{int a, b;string op;cin >> a >> op >> b;cout << binOps[op](a, b) << endl;return 0;
}

9、重载、类型转换与运算符

类型转换运算符(类的成员函数,无返回类型,无形参): operator  type()  const   

显式的类型转换运算符:如果表达式被用作条件,则编译器会将显式的类型转换自动应用于它。

向bool类型转换通常用在条件部分,因此operator bool一般定义成explicit的。

C++ 运算符重载与类型转换相关推荐

  1. C++ 运算符重载和类型转换函数

    C++中对于用户自定义类对象的运算,要进行重载操作.如 class overload{public:... private:int num; }; overload o1, o2; int num; ...

  2. # c++运算符重载之 前置++, 后置++, 负号运算符, 类型转换函数, 以及输入输出运算符...

    c++运算符重载之 前置++, 后置++, 负号运算符, 类型转换函数, 以及输入输出运算符 标签(空格分隔): c++ 前言 我在c++学习的过程中, 对这几个不太常见的运算符重载不太会写.出现了很 ...

  3. C++学习笔记:(四)运算符重载 类型转换

    目录 6.运算符重载 6.1运算符重载的基本概念 6.2成员函数重载运算符 6.3友元函数重载运算符 6.4成员函数重载运算符和友元函数重载运算符比较 6.5类型转换 6.运算符重载 面向对象程序设计 ...

  4. C++ 重载强制类型转换运算符

    C++ 中,类型的名字(包括类的名字)本身也是一种运算符,即类型强制转换运算符. 类型强制转换运算符是单目运算符,也可以被重载,但只能重载为成员函数,不能重载为全局函数.经过适当重载后,(类型名)对象 ...

  5. 运算符重载、STL模板库、类型转换、异常处理机制(C++五)

    目录 一.运算符重载 1. 引入运算符重载 2.语法格式 3.运算符重载有两种表现形式 4.运算符重载分类 5.运算符重载的特点: 二.C++中的STL模板库的使用 1.容器类(container) ...

  6. c++运算符重载总结

    c++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程序更加简洁.高效.在c++中不止函数可以重载,运算符也可以重载.由于一般数据类型间的运算符没有重载的必要, ...

  7. 对象的比较与排序(五):C#运算符重载

    c#里的运算符重载是个不常出现的应用,同时也是个好玩的东西. 我们可以使用他来实现这样的需求: 当一个订单与另外一个订单相加形成一个新的订单.新订单的货物为两个订单的货物的并集,总价为两个订单的总价和 ...

  8. 10.2 运算符重载函数作为类成员函数和友元函数

    Complex operator+(Complex &c2) { Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; ...

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

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

最新文章

  1. 去除菜单项的加速键--‘’符号
  2. 计算机网络技术简答题,《计算机网络技术》简答题.doc
  3. 在NVIDIA Jetson Xavier NX上把yolov4-deepsort的模型pb模型使用tensorflow-onnx和onnx-tensorrt工具最终转换为tensorrt模型
  4. .NET获取机器信息
  5. Notice : Soft open files now is 1024, We recommend greater than 10000
  6. DirectionalLayout线性布局
  7. 解决前后台发送请求或者接口之间发送请求乱码的问题
  8. 设计模式——3.观察者模式
  9. 【渝粤题库】国家开放大学2021春2108刑法学(2)题目
  10. linux下运行程序后出现段错误的原因和解决案例
  11. MySQL Mathematical Functions(数学方法)
  12. 厦门大学c语言上机答案,厦门大学C语言程序设计2016模拟题讲评及课程复习.pptx...
  13. JBoss + EJB3 + MySql : 开发第一个EJB
  14. C语言输入输出格式符
  15. 目标检测——CodeBook背景建模(原理+Opencv实现代码)
  16. 汽车操作系统的前世今生
  17. Depsolving loop limit reached
  18. 裸机搭建深度学习服务器,ubuntu ssh服务器,pytorch, tensorflow, paddle三种框架安装。以及各种避雷。
  19. 【网络取证篇】suy网络工具包
  20. 在CentOS上解压含有中文名的ZIP文件出现乱码的解决办法

热门文章

  1. 开源项目贡献者_如何管理开源项目的临时贡献者
  2. 京东到家大数据平台演进实战
  3. 使用MDK创建stm32 库函数工程简单教程
  4. 医疗等保2.0|新版测评标准对医疗行业网络安全等级保护提出了更高要求
  5. 2019网络统考计算机基础,2019年12月网络教育统考《计算机应用基础》复习题(十)...
  6. stm8s001 - SWIM复用为ADC输入 ADC电压值不准确?
  7. NeurIPS latex中文支持
  8. 网线接法大全(RJ45型网线插头)
  9. android gallary demo
  10. edge 此项内容已下载并添加到 Chrome 中。_比肩迅雷的下载神器大盘点