Geekband C++ 第三周

概述:

  1. 介绍C++1.0除了面向对象设计外的一些周边的特性
  2. 介绍C++2.0的三个特性

类型转换

  ○ 转换函数:conversion function
      ■ 将用户定义的对象转换成其他类型的对象
      ■ 例子如下图:
          ● 编译器没找到 + 操作符
          ● (黄色的)转换函数将 f 转换成 double
Geekband C++ 第三周_第1张图片
clipboard1.png
  ○ non-explicit-one-argument ctor
      ■ 将其他类型的对象转换成用户定义的对象。
      ■ 例子如下图:
          ● 编译器找到 + 函数
          ● 调用(绿色)non-explicit ctor将 4 转换为 Fraction(4,1)
Geekband C++ 第三周_第2张图片
clipboard(12).png
  ○ 转换函数和non-explicit-one-argument actor引起的ambiguous
      ■ 例子如下图
Geekband C++ 第三周_第3张图片
clipboard(13).png
  ○ explicit-one-argument ctor:
      ■ 构造函数前加explict 关键字,明确表示不能类型转换
      ■ 例子如下:
Geekband C++ 第三周_第4张图片
clipboard(5).png
  ○ 标准库中转换函数的例子(如下)
      ■ vector: 模板的偏特化
      ■ operator返回bool型,实际返回reference(proxy设计模式)
      ■ 返回时调用reference的convertion function
Geekband C++ 第三周_第5张图片
clipboard(7).png

Pointer like class

  ○ 智能指针,比传统指针具有更多功能
  ○ class shared_ptr
      ■ 包含(一般)指针 px
      ■ 构造函数接受(一般)指针:
      ■ shared_ptr具有(一般)指针的基本操作:*, ->
Geekband C++ 第三周_第6张图片
clipboard(14).png
  ○ 关于迭代器
      ■ 迭代器相当于一个智能指针
      ■ 需要处理:*,->,++,--,==,!=
      ■ 例子如下
Geekband C++ 第三周_第7张图片
clipboard(10).png

Function like class,仿函数(functor)

  ○ 类的定义中重载了( ),call operator
  ○ 例子如下:
Geekband C++ 第三周_第8张图片
clipboard(1).png
  ○ 标准库中,仿函数使用的奇特base class
      ■ 例子如下
Geekband C++ 第三周_第9张图片
clipboard(8).png

Namesapce

  ○ 主要用作隔离

Class template,模板类

  ○ 范型编程
  ○ 例子如下:模板类的声明和使用
Geekband C++ 第三周_第10张图片
clipboard(6).png

Function template,函数模板

  ○ 例子:声明和使用如下
  ○ 使用时,编译器进行实参推导
Geekband C++ 第三周_第11张图片
clipboard(11).png

成员模板

  ○ 标准库中很多模板的构造函数会设计成成员模板
  ○ 例子如下:一般指针可以up-cast,智能指针实现up-cast
Geekband C++ 第三周_第12张图片
clipboard(4).png

模板特化

模板偏特化

  ○ 个数上的偏
  ○ 范围上的偏

模板模板参数

  ○ 例子如下
Geekband C++ 第三周_第13张图片
clipboard(9).png

C++11的三个特性

  ○ Variadic template:参数可变化的模板
      ■ 例子如下
Geekband C++ 第三周_第14张图片
clipboard(2).png
  ○ 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,常用于函数的参数传递,和返回值

函数签名

  ○ 返回值不属于签名

你可能感兴趣的:(Geekband C++ 第三周)