侯捷面向对象高级编程(二)
转换函数
- 转换函数没有返回值,返回值就是
double
即函数名,不需要自己写 - 因为转换函数一般不会改变其中内容,所以要加
const
限定
- 两条路都可以走,就回产生歧义,报错
explict
禁止自动转换,于是4无法转转换为Fraction
pointer-like cliasses
->
作用之后还能继续作用不会消耗掉*sp
中的*
作用于sp
上后返回*px
,而->
作用后不会消失
function-like classes,仿函数
namespace 命名空间
放在不同命名空间,让彼此没有关联
class template
function template
member template
即使T1,T2确定了,U1,U2也可以变
可以嵌套,但是p.first
必须能给first
赋值,即U1,U2是T1,T2的子类
再举一个例子,同理
specialization 模板特化
我的理解就是,对不同的类型,采取有不同的行为
partial specialization 模板偏特化
事先绑定一个参数
- 如果不使用指针就用上面的情况 obj1
- 如果使用指针就用右下的情况 obj2
数量不定的模板参数
print
是递归调用,能打印出全部元素
void print() // 最后一个元素打印时调用
{}
template<typename T ,typename... Types>
void print(const T& first,const Types&... args)
{std::cout << first<<std::endl;print(args...);
}
int main()
{print(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
}
虚函数,虚指针
一种理解:继承中函数继承的是调用权
const
函数后面加const
只用于成语函数
COW: copy on write