第一周
一、导读
二、conversion function 转换函数
转换函数语法
operator double() const{} 通常是const(不是const也可以编译通过)
1.函数名称
2.没有返回类型,返回类型就是函数名称中的类型
三、non-explicit one argument ctor
只有一个实参就可以
non-explicit
Fraction(int num,int den=1):m_numerator(num),m_denominotor(den){}
explicit-one-argument ctor
explicit只用在构造函数的前面(还有模板的一小部分)
四、pointer-like classes
1.最经典的就是智能指针
两个操作符重载 *和 ->
c++语法:->箭头符号作用的结果可以继续作用下去
sp->返回结果是px,->已经消耗掉,但是px还可以继续->
2.迭代器
五、function-like classes
仿函数
能够接受()操作符
Gun C
select1st<Pair>()()
标准库中,仿函数所用的奇特的base classes
大小是0,没有函数
unary_function
binary_function
六、namespace经验谈
七、class template
八、function template
类模板使用时需要指明type,函数模板使用时不用指明type
编译器会对function template进行实参推导
九、member template
标准库中很多类的构造函数使用成员模板
十、specialization 模板特化
十一、 partial specialization 模板偏特化
1.个数的偏
左边到右边,不能跳
2.范围的偏
十二、 template template parameter 模板模板参数
template<typename T> 中typename和class共通,历史原因,原来没有typename只有class。
十三、 关于C++标准库
标准库中的容器和算法都自己试一遍
十四、 三个主题
C++11
第一步,确认支持c++11:macro_cplusplus
1.variadic templates
数量不定的模板参数
2.auto
C++的语法糖
3.ranged-base for
{}形成一个容器(c++11)
遍历容器方便很多
以前使用iterator或者foreach遍历容器
编译器怎么实现引用:都是用指针做的
十五、 Reference
从逻辑上r代表x,从实现上r是一个指针
1.一定有初值;
2.不能再变;
3.Object和其reference的大小相同,地址也相同(全都是假象)
Reference的常见用途
Reference通常不用于声明变量,而用于参数类型和返回类型的描述。
函数签名
const是不是函数签名的一部分?YES!
十六、 复合&继承关系下的构造和析构
参看第一部分的内容。