Boolan——C++面向对象高级编程(下)第一周

勿在浮沙筑高台!!!!!!!!!!!

C++(下)主要谈及对象模型;即泛型编程

effective modern C++

一.转换函数

(1)转换函数的一般方法:

重载该操作符,注意最好带const限定符

编译器首先寻找针对f类型的“+”运算符的重载,如果没有就考虑类型转化函数

(2)non-explicit-one-argument ctor

多个参数,但只传入一个实参

Boolan——C++面向对象高级编程(下)第一周_第1张图片

将int型转化为Fraction型。

(3)explicit-one-argument

(1)和(2)同可以实现不同类型相加产生的类型转换,但是如果合并于同一个类中,则容易产生错误。如下:

Boolan——C++面向对象高级编程(下)第一周_第2张图片

因此explicit-one-argument


加入关键字explict(只用于构造函数之前)则该构造函数不会进行强制类型转换

二.关于智能指针

所产生的对象像一个指针

(1)对传入的原指针的一种包装


Boolan——C++面向对象高级编程(下)第一周_第3张图片
Boolan——C++面向对象高级编程(下)第一周_第4张图片

尤其注意符号“->”会一直作用于一个类,知道找到需要找的类变量或者类函数。

(2)迭代器——另一类型的智能指针

Boolan——C++面向对象高级编程(下)第一周_第5张图片

三.函数对象(仿函数)

任何一个能接受操作符“()”的东西,如类等。。。

(1)标准库中的仿函数都会继承base class如下:

Boolan——C++面向对象高级编程(下)第一周_第6张图片

其本身的类如下:

Boolan——C++面向对象高级编程(下)第一周_第7张图片

四.namespace

五.类模板

1.使用时需要指定参数类型

六.函数模板

1.使用时不用制定参数类型

七.成员模板

(1)


Boolan——C++面向对象高级编程(下)第一周_第8张图片

其用途为:


Boolan——C++面向对象高级编程(下)第一周_第9张图片

主要用于父类子类关系转换导致的赋值,即符合函数的类型转换。

(2)向上类型转换

八.模板特化

以下为模板的泛化

但是加入以下代码之后便成为模板的特化,根据不同的key执行不同的函数

Boolan——C++面向对象高级编程(下)第一周_第10张图片

九.模板的偏特化

(1)个数上的偏

两个模板参数,但可以从左到右绑定一定数量的参数

(2)范围上的偏

指针与非指针调用不同的模板,指针调用特化模板,非指针调用泛化模板


Boolan——C++面向对象高级编程(下)第一周_第11张图片

十.模板模板参数


Boolan——C++面向对象高级编程(下)第一周_第12张图片

用处:

但因为List的模板参数不止一个,所以错误,当第二个模板只有一个模板参数时成立。

你可能感兴趣的:(Boolan——C++面向对象高级编程(下)第一周)