Conversation funtion转换函数
将该类的对象转换为其他类型
转换函数实现将分数转换为小数
重载double使Fraction转换为double
non-explicit-one-argument ctor
构造函数前不加任何关键字即是non- explicit,one-argument只要一个实参就够了
可以把别的类的对象转换为该类,与对比转换函数是完全相反的
explicit-one-argument ctor
加了explicit之后不会自动调用构造函数进行转换
智能指针 pointer-like classes(设计class去模拟pointer)
智能指针内一定会有一个普通指针
智能指针中一定要重载运算符*和->
调用智能指针的构造函数,将普通指针传入进去生成一个智能指针
sp->method()等价于px->method
sp->等价于px
箭头符号有一个特殊的行为,作用下去得到结果后箭头符号会继续作用下去
所以在sp->==px之后继续作用下去执行px->method
迭代器用途是遍历容器,所以要重载++,–等运算符
function-like class仿函数
identity传入什么类型则传出什么类型
select1st取出第一个所传入的Pair
select2nd取出第一个所传入的Pair
标准库中,仿函数会继承奇特的base classes父类
namespace经验谈
全局变量全局函数以及class等等都放在namespace中
放在不同的命名空间中可以防止函数之间的冲突
class template类模板
在设计class的时候,认为可以把哪种变量或函数抽出来允许使用者任意指定就将其前面加T,将其抽出
在使用时指定T的类型
function template函数模板
函数模板在使用时不必指明type,函数在调用时会进行实参推导,根据调用时的参数推导出type的类型
如果传入函数模板的类型为stone,而stone中没有重载函数模板中用到的运算符,则此时会报错
member template成员模板
可以让构造函数更有弹性
传入构造函数的初值如果是该类的子类所构成的,则可以成功赋值
up-cast 用子类创建一个指针并将其指向给父类
上转型对象:用子类创建一个对象并将其引用给父类创建的对象
模板特化
模板泛化
模板特化
模板偏特化-个数上的偏
为了单独为该数据类型设计一套,而非使用模板泛化
将第一个参数的数据类型绑定为bool值
模板偏特化-范围上的偏
将参数的数据类型所取范围缩小
模板模板参数
禁止套娃!
C++标准库
三个主题
variadic templates
数量不定的模板参数
把调用者分进来的模板参数分为一个和一小包
语法糖
auto
//之前
List<string>::iterator ite;
ite=find(c.begin(),c.end(),target);
//现在
auto=find(c.begin(),c.end(),target);
语法糖
for
for(decl:coll){
statement
}
将冒号右边容器中的值赋到左边这个变量上