Geekban極客班C 第四周

2021-07-12 05:09:16 字數 2218 閱讀 9821

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...