勿在浮沙筑高台!!!!!!!!!!!
C++(下)主要谈及对象模型;即泛型编程
effective modern C++
一.转换函数
(1)转换函数的一般方法:
重载该操作符,注意最好带const限定符
编译器首先寻找针对f类型的“+”运算符的重载,如果没有就考虑类型转化函数
(2)non-explicit-one-argument ctor
多个参数,但只传入一个实参
将int型转化为Fraction型。
(3)explicit-one-argument
(1)和(2)同可以实现不同类型相加产生的类型转换,但是如果合并于同一个类中,则容易产生错误。如下:
因此explicit-one-argument
加入关键字explict(只用于构造函数之前)则该构造函数不会进行强制类型转换
二.关于智能指针
所产生的对象像一个指针
(1)对传入的原指针的一种包装
尤其注意符号“->”会一直作用于一个类,知道找到需要找的类变量或者类函数。
(2)迭代器——另一类型的智能指针
三.函数对象(仿函数)
任何一个能接受操作符“()”的东西,如类等。。。
(1)标准库中的仿函数都会继承base class如下:
其本身的类如下:
四.namespace
五.类模板
1.使用时需要指定参数类型
六.函数模板
1.使用时不用制定参数类型
七.成员模板
(1)
其用途为:
主要用于父类子类关系转换导致的赋值,即符合函数的类型转换。
(2)向上类型转换
八.模板特化
以下为模板的泛化
但是加入以下代码之后便成为模板的特化,根据不同的key执行不同的函数
九.模板的偏特化
(1)个数上的偏
两个模板参数,但可以从左到右绑定一定数量的参数
(2)范围上的偏
指针与非指针调用不同的模板,指针调用特化模板,非指针调用泛化模板
十.模板模板参数
用处:
但因为List的模板参数不止一个,所以错误,当第二个模板只有一个模板参数时成立。