泛型編程與面向?qū)ο缶幊淌莄++兩大技術(shù)主線 分屬不同思維
繼承關(guān)系所形成的對(duì)象模型(Object Model) 包括隱藏于底層的this指針 vptr(虛指針)vtbl(虛表)vitural mechanism(虛機(jī)制)以及virtual function(虛函數(shù))造成的polymorphism(多態(tài))效果
Conversion function 轉(zhuǎn)換函數(shù)
public:
Fraction(int num, int den = 1)
????? : m_numerator(num), m_denominator(den){ }
operator double () const{
Return (double)(m_numerator / m_denominator);
}? //調(diào)用這個(gè)函數(shù)可以使這個(gè)類可以被轉(zhuǎn)化為double? 通常會(huì)加const
Fraction f(3,5)
double d = 4+f;? //調(diào)用operator double()
編譯器思路
:1)找是否重載了+
2)找是否重載了double
non-explicit-one-argument ctor
//explict 可以出現(xiàn)在構(gòu)造函數(shù)前面
調(diào)用 non-ecplicit ctor 將4轉(zhuǎn)為Fraction(4肠骆,1)
然后調(diào)用operator+
Fraction f(3,5);
Fraction d2 = f + 4;//[Error] ambiguous
Fraction d2 = f + 4;//[Error] converion from ‘double ‘to ‘Fraction’ request
double d = 4;//可以通過(guò)
operator double 和 non-explicit 共存時(shí)能否編譯取決于如何使用
explicit作用:
Class vector<bool,Alloc>//??递胧?
{
Protected;
reference operator [] (size_type n){
return *
}
point-like-class 設(shè)計(jì)一個(gè)像指針的類
1)關(guān)于智能指針
2.0之前 auto point? 之后 shared_ptr
2)迭代器
不但處理*和->還處理++? --
function-like classes 設(shè)計(jì)一個(gè)行為像函數(shù)的類(所謂仿函數(shù))
函數(shù)模板使用時(shí)不用指明
成員模板 member template
目的:讓構(gòu)造函數(shù)更有彈性
模板特化 (full)specialization
partial specialization模板偏特化
(個(gè)數(shù)的偏)
可以指定一個(gè)元素類型 指定一個(gè)分配器
(范圍的偏)
上面的是泛化 下面的是特化(注:上下的T不是同一個(gè)東西)
模板模板參數(shù) template template parameter
這不是模板模板參數(shù)
三個(gè)主題
關(guān)于variadic template(since C++11)模板參數(shù)可變化
關(guān)于auto
必須在申明的時(shí)候就賦值
關(guān)于 range-base for
for(decl : coll)? //從容器中一個(gè)個(gè)抓出來(lái) 賦值到左邊 執(zhí)行一次statement
{
statement
}
c++11以前可以用 容器的迭代器和 foreach來(lái)實(shí)現(xiàn)
注:pass by value不會(huì)改變?nèi)萜髦械臄?shù)值,而pass by reference會(huì)