14重载运算与类型转换

14重载运算与类型转换

14.1基本概念

Operator重载的运算符包含返回类型、参数列表以及函数体。

左侧运算对象传递给第一个参数,而右侧运算对象传递给第二个参数。

不应该被重载:逻辑与、或运算符,逗号运算符;&&和||;不重载逗号运算符和取地址运算符。

重载的赋值运算应该继承而非违背其内置版本的含义。

选择作为成员或者非成员

如果我们想提供含有类对象的混合类型表达式,则运算符必须定义成非成员函数。它的左侧运算对象必须是运算符所属类的一个对象。

14.2输入和输出运算符

输入输出运算符是非成员函数

14.3算术和关系运算符

14.3.1相等运算符设计准则

14.3.2关系运算符设计准则

14.5下标运算符

必须是成员函数

14.6递增和递减运算符

前置++i

后置i++

接受一个额外的(不被使用)int类型的形参,编译器会提供0

14.7成员访问运算符

14.8函数调用运算符

定义了调用运算符,则该类的对象称作函数对象。可以调用这种对象,“行为像函数一样”。

14.8.1lambda是函数对象

....

14.8.2标准库定义的函数对象

14.8.3可调用对象与function

标准库function类型

重载的函数与function

不能(直接)将重载的函数名字存入function类型的对象中,以免二义性,解决途径是存储函数指针。

14.9重载、类型转换和运算符(还未get到点)

14.9.1类型转换运算符

可以面向任意类型(void除外)进行定义,不允许转换成数组或者函数类型,但允许转换成指针(包括数组指针及函数指针)或者引用类型。必须定义成类的成员函数,通常不应该改变转换对象的内容,一般定义成const成员。

显示的类型转换运算符(explicit),一般要通过显示的强制类型转换。但存在一个例外,就是表达式被用作条件,以下表达式出现下列位置时,会隐式的执行转换。

14.9.2避免有二义性的类型转换

14.9.3函数匹配与重载运算符

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,541评论 1 51
  • C++运算符重载-上篇 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符和二元逻辑运算符4...
    Haley_2013阅读 2,324评论 0 51
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,282评论 9 118
  • C++运算符重载-下篇 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符和二元逻辑运算符4...
    Haley_2013阅读 1,478评论 0 49
  • 所能做的 所有的挣扎 不过是从一个城市的苟且辗转到另一个城市的苟且 恍然发现 我穷其一生所求的 我颠颠撞撞所寻的 ...
    于能耐呀阅读 156评论 0 0