概述:
1. 介绍C++1.0除了面向对象设计外的一些周边的特性
2. 介绍C++2.0的三个特性
类型转换
○ 转换函数:conversion function
■ 将用户定义的对象转换成其他类型的对象
■ 例子如下图:
● 编译器没找到 + 操作符
● (黄色的)转换函数将 f 转换成 double
○ non-explicit-one-argument ctor
■ 将其他类型的对象转换成用户定义的对象。
■ 例子如下图:
● 编译器找到 + 函数
● 调用(绿色)non-explicit ctor将 4 转换为 Fraction(4,1)
○ 转换函数和non-explicit-one-argument actor引起的ambiguous
■ 例子如下图
○ explicit-one-argument ctor:
■ 构造函数前加explict 关键字,明确表示不能类型转换
■ 例子如下:
○ 标准库中转换函数的例子(如下)
■ vector<bool, Alloc>: 模板的偏特化
■ operator返回bool型,实际返回reference(proxy设计模式)
■ 返回时调用reference的convertion function
Pointer like class
○ 智能指针,比传统指针具有更多功能
○ class shared_ptr
■ 包含(一般)指针 px
■ 构造函数接受(一般)指针:
■ shared_ptr具有(一般)指针的基本操作:*, ->
○ 关于迭代器
■ 迭代器相当于一个智能指针
■ 需要处理:*,->,++,--,==,!=
■ 例子如下
Function like class,仿函数(functor)
○ 类的定义中重载了( ),call operator
○ 例子如下:
○ 标准库中,仿函数使用的奇特base class
■ 例子如下
Namesapce
○ 主要用作隔离
Class template,模板类
○ 范型编程
○ 例子如下:模板类的声明和使用
Function template,函数模板
○ 例子:声明和使用如下
○ 使用时,编译器进行实参推导
成员模板
○ 标准库中很多模板的构造函数会设计成成员模板
○ 例子如下:一般指针可以up-cast,智能指针实现up-cast
模板特化
模板偏特化
○ 个数上的偏
○ 范围上的偏
模板模板参数
○ 例子如下
C++11的三个特性
○ Variadic template:参数可变化的模板
■ 例子如下
○ Auto:
○ range based for:
Reference
○ int* p;//p是一个变量,类型是pointer to int(老师建议*和int写在一起)
○ int x =0; int& r = x;
■ r代表x。现在r,x都是0;
■ r是一个reference to x
■ reference一定要有初值,而且不能再变
○ 编译器在实现引用时,都是通过指针实现
○ object和reference的大小相同,地址也相同(都是假象,实际是通过指针实现的)
○ 常见用途
■ 很少单独声明一个变量的reference,常用于函数的参数传递,和返回值
函数签名
○ 返回值不属于签名