第14章 重载运算与类型转换
1. 当一个重载的运算符时成员函数时,this绑定到左侧运算对象,成员运算符函数显式地参数量比运算对象地数量少一个。
2.我们把运算符定义为成员函数时,它地左侧运算对象必须是所属类地对象。
3.具有对称性的运算符,一般定义为普通的非成员函数。比如算术和关系运算符。
4.输入输出运算符必须是非成员函数。
5.类如果同时定义了算术运算符和相关的复合赋值运算符,则应用复合赋值来实现算数运算符。
6.赋值运算符必须是成员函数。
7.下标运算符必须是成员函数,同时需要定义常量和非常量版本。
8.递增和递减运算符应该是成员函数,并各自有前置和后置版本。
9.后置运算符为了和前置区分,接受一个额外的不被使用的int形参。且返回对象的原值,不是引用。
10.函数调用运算符,可以像函数一样调用对象,必须是成员函数。把这种对象称之为函数对象。
11.函数对象通常作为泛型算法的实参。
12.lambda是函数对象。lambda表达式产生的类不含默认构造函数等。
13.在算法中使用标准库函数对象。sort的降序排列:sort(vec,begin(), vec.end(), greater<int>());
14.无关指针的比较产生未定义行为。可以用标准库函数对象来实现目的。less<string*>(),关联容器map,set等用less<T>对元素排序。
15.标准库function类型,解决相同调用形式的不同类型可调用对象存储问题。function<int<int,int>>;
16.类型转换运算符负责把类类型转换为其他类型,是成员函数,无返回类型,形参列表为空,函数是const。
17.对类而言,定义向Bool的类型转换是比较普遍的。
18.为了防止异常情况产生,定义显式的类型转换运算符,explicit.必须显式地强制类型转换才可以用。但是用作条件时,不需要。
19.while(cin>>value),其中cin>>value返回cin,cin被istream operator bool类型转换函数隐式地转换。
20.表达式中运算符地候选函数集既包括成员函数也包括非成员函数。
21.二义性错误。对一个类既提供了转换目标是算术类型地类型转换,也提供了重载地运算符,则会有重载运算符和内置运算符二义性的问题。
22.只接受一个实参的非显式构造函数定义了从实参类型到类类型的类型转换。非显式地类型转换运算符定义了从类类型到其他类型地转换。