侯捷面向对象高级编程(二)
转换函数
转换函数没有返回值,返回值就是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