operator
double() const //轉換函式
fraction f(3,5);
double d=4+f;
operator double() const為轉換函式,將物件的型別轉換為double。
在執行d=4+f,編譯器先尋找是否過載了+符合表示式的要求,若沒有在找是否有轉換函式,改變f的型別。
one-augument只要乙個實參就夠了
class fraction
fraction operator+(const fraction& f) {}
}fraction d2=f+4;
執行d2=f+4時,編譯器發現operator+,但是函式裡的引數是fraction物件,看能否將4轉為fraction物件,找到了fraction( , ),轉為fraction(4,1)。
explict明確的,只讓其擁有建構函式的功能
template
class
shared_ptr
t* operator->() const
shared_ptr(t* p):px(p){}
private:
t* px;
long* pn;
};
struct foo
};share_ptrsp(new foo)//建立乙個新的指標
foo f(*sp);//返回得到*px
sp->method();//返回得到px,其中->符號要繼續作用,等同於px->method()
智慧型指標其內部一定帶著乙個一般的指標
一定要operator * ->
兩種偏特化:1.個數的偏,2:範圍的偏
template
//兩個模板引數
class
vector
template
//乙個模板引數
class
vector
//將乙個模板引數定為bool
範圍的偏:若t為任意型別,可將其設為指標,指向任意型別
template
class c {};//不是指標呼叫這
template
class c {}//是指標呼叫這
void print(){}
template
void print(const t& firstarg,const types&...args)//接受乙個引數,和一包引數
print(7.5,"hello",bitset
<16>(377),42);
執行過程:接受乙個引數7.5,接受剩下的一包引數,再次呼叫print(),接受乙個引數「hello」,和剩下的一包引數,再次遞迴呼叫print。當呼叫至最後乙個引數時,將0傳入,呼叫失敗,另寫乙個不要引數的print()。
…就是乙個所謂的pack
用於template parameters,就是模板引數包
用於function parameter types,就是函式引數型別包
用於function parameters,就是函式引數包
for(decl:coll)//decl變數,coll容器
編譯器從容器中乙個個取出資料。
vectoer vec;
....
for( auto elem : vec)//傳引用,將值乘以3
reference通常不用於宣告變數,而用於引數型別和返回型別的描述。
double imag(const double& im)
double imag(const double im)
上述兩個函式不能同時存在。再呼叫時,編譯器不知該呼叫哪個函式。
const是函式宣告的一部分
Geekban極客班 C 第五周
只要類裡帶有虛函式,物件裡就會多乙個指標。繼承函式是繼承函式的呼叫權,父類有虛函式則子類一定虛函式。虛指標vptr指向虛表vtbl,虛表中存放虛函式指標。c 編譯器遇到函式呼叫,有兩種方式 靜態繫結 動態繫結 動態繫結的三個條件 1.必須是通過指標呼叫 2.指標向上轉型 3.呼叫的是虛函式。動態繫結...
Geekban極客班 第三週
template class queue類queue中有另乙個類sequence的物件c has a的關係 乙個類中有另乙個類的物件。構造由內而外 先呼叫內部的預設建構函式,再呼叫外部的建構函式。編譯器自動呼叫內部預設的建構函式,若要呼叫其他建構函式,需要自己呼叫。析構由外而內 先呼叫外部的析構函式...
第四周C 作業
1.完成課本每乙個程式設計題。要求先畫出流程演算法圖或n s圖,然後程式設計實現,有可能的話使用兩種以上方法 課本76頁程式設計題 求自然對數e的近似值 include using namespace std int main cout e int main cout pai 4 paiint ma...