概述:
1. 介紹C++1.0除了面向?qū)ο笤O計外的一些周邊的特性
2. 介紹C++2.0的三個特性
類型轉換
○ 轉換函數(shù):conversion function
■ 將用戶定義的對象轉換成其他類型的對象
■ 例子如下圖:
● 編譯器沒找到 + 操作符
● (黃色的)轉換函數(shù)將 f 轉換成 double
clipboard1.png
○ non-explicit-one-argument ctor
■ 將其他類型的對象轉換成用戶定義的對象东抹。
■ 例子如下圖:
● 編譯器找到 + 函數(shù)
● 調(diào)用(綠色)non-explicit ctor將 4 轉換為 Fraction(4庄涡,1)
clipboard(12).png
○ 轉換函數(shù)和non-explicit-one-argument actor引起的ambiguous
■ 例子如下圖
clipboard(13).png
○ explicit-one-argument ctor:
■ 構造函數(shù)前加explict 關鍵字掂恕,明確表示不能類型轉換
■ 例子如下:
clipboard(5).png
○ 標準庫中轉換函數(shù)的例子(如下)
■ vector<bool, Alloc>: 模板的偏特化
■ operator返回bool型狞悲,實際返回reference(proxy設計模式)
■ 返回時調(diào)用reference的convertion function
clipboard(7).png
Pointer like class
○ 智能指針咪辱,比傳統(tǒng)指針具有更多功能
○ class shared_ptr
■ 包含(一般)指針 px
■ 構造函數(shù)接受(一般)指針:
■ shared_ptr具有(一般)指針的基本操作:*, ->
clipboard(14).png
○ 關于迭代器
■ 迭代器相當于一個智能指針
■ 需要處理:*,->朽基,++布隔,--,==稼虎,衅檀!=
■ 例子如下
clipboard(10).png
Function like class,仿函數(shù)(functor)
○ 類的定義中重載了( )霎俩,call operator
○ 例子如下:
clipboard(1).png
○ 標準庫中哀军,仿函數(shù)使用的奇特base class
■ 例子如下
clipboard(8).png
Namesapce
○ 主要用作隔離
Class template沉眶,模板類
○ 范型編程
○ 例子如下:模板類的聲明和使用
clipboard(6).png
Function template,函數(shù)模板
○ 例子:聲明和使用如下
○ 使用時杉适,編譯器進行實參推導
clipboard(11).png
成員模板
○ 標準庫中很多模板的構造函數(shù)會設計成成員模板
○ 例子如下:一般指針可以up-cast谎倔,智能指針實現(xiàn)up-cast
clipboard(4).png
模板特化
模板偏特化
○ 個數(shù)上的偏
○ 范圍上的偏
模板模板參數(shù)
○ 例子如下
clipboard(9).png
C++11的三個特性
○ Variadic template:參數(shù)可變化的模板
■ 例子如下
clipboard(2).png
○ Auto:
○ range based for:
Reference
○ int* p;//p是一個變量猿推,類型是pointer to int(老師建議*和int寫在一起)
○ int x =0; int& r = x;
■ r代表x∑埃現(xiàn)在r,x都是0蹬叭;
■ r是一個reference to x
■ reference一定要有初值藕咏,而且不能再變
○ 編譯器在實現(xiàn)引用時,都是通過指針實現(xiàn)
○ object和reference的大小相同秽五,地址也相同(都是假象孽查,實際是通過指針實現(xiàn)的)
○ 常見用途
■ 很少單獨聲明一個變量的reference,常用于函數(shù)的參數(shù)傳遞坦喘,和返回值
函數(shù)簽名
○ 返回值不屬于簽名