GeekBand之C++面向?qū)ο蟾呒壘幊?下)第二周筆記

C++程序設(shè)計(jì)(Ⅱ)


提醒:勿在浮沙筑高臺


泛型編程和面向?qū)ο缶幊淌荂++的技術(shù)主線


深入探索面向?qū)ο笾^承關(guān)系所形成的對象模型(Object Model),包括隱藏于底層的this指針,vptr(需指針),vtbl(虛表),virtual mechanism(需機(jī)制),以及虛函數(shù)(virtual functions) 造成的polymorphism(多態(tài))效果。


2.Conversion Function 轉(zhuǎn)換函數(shù)


operator function_name() const{return ......}

operator 是關(guān)鍵字,不可以有參數(shù) 且不寫返回值,另外,函數(shù)名稱是一種數(shù)據(jù)類型且通常+ const。

?

3.non-explicit-one-argument ctor

只要一個實(shí)參就夠了,


explicit --意思是明白的,明確的 告訴編譯器不要進(jìn)行隱式操作。一般在構(gòu)造函數(shù)前面。


typedef 類型 重命名


4.pointer-like classes,關(guān)于智能指針,智能指針必然是一個class。

? ? ?一個智能指針一定是一個類,數(shù)據(jù)成員至少有一個指針成員和若干操作方法。操作方法中一定有->操作符重載和*操作符重載,用于獲取成員指針和成員指針指向的內(nèi)容(或?qū)ο?

5.pointer-like classes ,關(guān)于迭代器

? ? ?迭代器代表容器【vector】中一種元素,因此它也可以看作為一個智能指針。也就是創(chuàng)建一個class 模擬pointer功能。


6.function-like classes,所謂仿函數(shù)

? ? ?創(chuàng)建一個class,用來模擬function,因此需要對操作符()重載。 類似這些class創(chuàng)建出來的對象都是 “函數(shù)對象”或稱為“仿函數(shù)”


7.namespace 經(jīng)驗(yàn)談

? ? ?將一些變量、函數(shù)等封裝到一個namespace里面,類似劃區(qū)間分類的感念。


8.class template,類模板

? ? ?template<typename T>

? ? ?在你設(shè)計(jì)類的時候,你考慮可以把哪些類型抽出來,好動態(tài)傳遞,使得創(chuàng)建的類具備通用性。

? ? ?在創(chuàng)建類模板對象時,一定要指定模板類型例如,complex<double>c1(2.5,1.5)


9.function template ,函數(shù)模板

? ? ?函數(shù)模板在使用時,不必指定數(shù)據(jù)類型。例如,min(r1,r2);原因在于編譯器會進(jìn)行實(shí)參推導(dǎo)(argument deduction)


10.member template,成員模板

?????一個成員是一個模板的成員,而這個成員本身也是一個模版,那么我們就稱這個成員為成員模板。個人理解是模板嵌套。

? ? ?up-cast ? ? ?允許子類指針指向父類對象。

? ? ? ? ??

11.specialization,模板特化

? ? ?什么叫泛化:就是使用模板template進(jìn)行設(shè)計(jì)類和函數(shù)。

? ? ?什么叫特化:為了某些獨(dú)特的類型進(jìn)行特殊的設(shè)計(jì)。

? ? ?

12.partial specialization,模板偏特化

? ? ?也叫局部特化,有兩種形式:

?????【個數(shù)上的偏】,例如,模板參數(shù)有N個,如果此時你想綁定某一個參數(shù)類型。且綁定順序一定是連續(xù)的。

?????【范圍上的偏】,由原來的任意數(shù)據(jù)類型,縮小到例如,任意類型指針且必須是指針類型。


13.template template parameter,模板模板參數(shù)

? ? ?


下面的截圖不是模板模板參數(shù)


  1. 關(guān)于C++標(biāo)準(zhǔn)庫

? ?? ?????對于初學(xué)者一定要熟悉它,多使用它。

? ??????? 容器Sequence Containers

? ? ? ? ? ? ? ? ? ? ? ? ?array

? ? ? ? ? ? ? ? ? ? ? ? ?vector

? ? ? ? ? ? ? ? ? ? ? ? ?deque

? ? ? ? ? ? ? ? ? ? ? ? ?forward_list

? ? ? ? ? ? ? ? ? ? ? ? ?list

? ? ? ? ? ? ? ?Container adaptors:

? ? ? ? ? ? ? ? ? ? ? ? ?stack

? ? ? ? ? ? ? ? ? ? ? ? ?queue

? ? ? ? ? ? ? ? ? ? ? ? ?priority_queue


? ?? ?????算法Algorithms

? ? ? ? ? ? ? ? Sorting:

? ? ? ? ? ? ? ? ? ? ? ? ?sort

? ? ? ? ? ? ? ? ? ? ? ? ?stable_sort

? ? ? ? ? ? ? ? ? ? ? ? ?partial_sort

? ? ? ? ? ? ? ? ? ? ? ? ?partial_sort_copy

? ? ? ? ? ? ? ? ? ? ? ? ?is_sorted

? ? ? ? ? ? ? ? ? ? ? ? ?is_sorted_until

? ? ? ? ? ? ? ? ? ? ? ? ?nth_element


? ? ? ? ? ? ?? Binary search

? ? ? ? ? ? ? ? ? ? ? ? ?lower_bound

? ? ? ? ? ? ? ? ? ? ? ? ?upper_bound

? ? ? ? ? ? ? ? ? ? ? ? ?equal_range

? ? ? ? ? ? ? ? ? ? ? ? ?binary_search

? ? ?

? ? ? ? ? ? ? ?Merge(operating on sorted)

? ? ? ? ? ? ? ? ? ? ? ? ?merge

? ? ? ? ? ? ? ? ? ? ? ? ?inplace_merge

? ? ? ? ? ? ? ? ? ? ? ? ?includes

? ? ? ? ? ? ? ? ? ? ? ? ?set_union

? ? ? ? ? ? ? ? ? ? ? ? ?set_intersection

? ? ? ? ? ? ? ? ? ? ? ? ?set_difference

? ? ? ? ? ? ? ? ? ? ? ? ?set_symmetric_difference

? ? ? ? ? ? ? ? ? ? ? ? ?......

? ? ?不要眼高手低,盡量測試這些數(shù)據(jù)結(jié)構(gòu)和算法。


auto 語法糖
以前:
list<string> c;
...
list<string>::iterator ite;
ite = find(c.begin(),c.end(),target);

現(xiàn)在:
list<string>c;
...
auto ite =find(c.begin(),c.end(),target);


ranged-base for
for(decl:coll){
? ? ?statement
}
//decl 可以是一個變量,coll必須是一個容器
例如,for(int i:{2,3,4,5,6,9}){
? ? ?cout <<i<<endl;
}

動態(tài)綁定或虛機(jī)制:
必要條件:
1.必須要是指針
2.向上轉(zhuǎn)型
3.調(diào)用的是虛函數(shù)

靜態(tài)綁定:通過地址直接訪問。

對象模型:關(guān)于this

在C++中所有成員函數(shù)都有一個隱藏的this指針。

有關(guān)new 、delete
new:先分配memory,再調(diào)用ctor
delete:先調(diào)用dtor,再釋放memory
array new 一定要搭配array delete
? ? ?例如,String* p = new String[3];
? ? ? ? ? ? ? ?delete[] p;//喚醒3次dtor


重載::operator new ,::operator delete
? ? ? ::operator new[],::operator delete[]




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容