GeekBand C 物件導向下第一周筆記

2021-07-26 20:05:24 字數 2788 閱讀 3220

在這一周的課程裡,老師講解了許多c++物件模型的知識點。在此一一羅列記錄:

1.轉換函式

轉換函式採用如下的一般形式:

operator type()

這裡的type可用內建型別、類型別或typedef名取代。但是不允許type表示陣列或函式。

轉換函式必須是成員函式,它的宣告不能指定返回型別和引數列表。

如果轉換函式沒有類成員進行修改,可以在函式宣告中增加const關鍵字,增加**的健壯性。

2.non-explicit one argument constructor

class fraction 

fraction operator + (const fraction& f)

private:

int m_numerator; // 分子

int m_denominator; // 分母

};fraction f(3, 5);

fraction d2 = f + 4; // 呼叫non-explicit ctor將4轉換成fraction(4, 1),然後再呼叫operator +

函式fraction(int num, int den = 1),因為第二引數有預設值,所以函式為單參函式。

關鍵字explicit慣用於建構函式,並且只能用於修飾只有乙個引數的類建構函式。它的作用是表明該建構函式是顯示的, 而非隱式的, 跟它相對應的另乙個關鍵字是implicit, 意思是隱藏的,類建構函式預設情況下即宣告為implicit(隱式)。

3.pointer-like classes

存在和指標類似的class,如智慧型指標,迭代器(特殊的智慧型指標)

t& operator*() const

t* operator->() const

t& operator*() const

t* operator->() const

4.function-like classes

同樣存在類似函式的類,仿函式(functor),就是使乙個類的使用看上去象乙個函式。其實現就是類中實現乙個operator(),這個類就有了類似函式的行為,就是乙個仿函式類了。

const t& 

operator()(const t& x) const

5.模板

類模板

類模板通式

templateclass 類名

;

模板的宣告或定義只能在全域性,命名空間或類範圍內進行。即不能在區域性範圍,函式內進行,比如不能在main函式中宣告或定義乙個模板。

類模板物件的建立:比如乙個模板類a,則使用類模板建立物件的方法為am;在類a後面跟上乙個<>尖括號並在裡面填上相應的型別,這樣的話類a中凡是用到模板形參的地方都會被int 所代替。

函式模板

函式模板通式

template(返回型別) 函式名(引數)

;

函式模板可以用來建立乙個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計 。不同於類模板,編譯器會對函式模板進行實參推導。

成員模板

任意類(模板或非模板)可以擁有本身為類模板或函式模板的成員,這種成員稱為成員函式模板。

6.模板特化

template

struct hash{};

struct hash{};//模板特化

struct hash{};

模板特化(template specialization)的定義為指定乙個或多個模板形參的實際型別或實際值。上面**就是模板特化的乙個例子。

所謂的模板偏特化是指提供另乙份template定義式,而其本身仍為templatized;也就是說,針對template引數更進一步的條件限制所設計出來的乙個特化版本。

7.varidic templates

varidic templates指數量不定的模板引數,如:

template

…就是乙個所謂的pack(包)

用於模板引數,就是模板引數包

用於函式引數,就是函式引數包

8.auto

c++11中引入的auto主要有兩種用途:自動型別推斷和返回值佔位。auto在c++98中的標識臨時變數的語義,由於使用極少且多餘,在c++11中已被刪除。前後兩個標準的auto,完全是兩個概念。

auto自動型別推斷,用於從初始化表示式中推斷出變數的資料型別。通過auto的自動型別推斷,可以大大簡化我們的程式設計工作。

9.ranged-base for

ranged-base for是c++ 11新增特性,用於迴圈迭代乙個「範圍」。

語法:

for ( range_declaration : range_expression) loop_statement

C 物件導向高階程式設計(下) 第一周

你現在設計乙個物件 class a,它可不可以被轉為另外一種型別,這就是一種轉換。或者是,另外一種型別可不可以轉為a。乙個是轉出去,乙個是轉進來,這兩個方向,我們都要談。現在首先談的是轉出去 1 轉化函式不可以有引數。轉換型別而已,那有什麼引數可言。2 轉化函式沒有返回型別,返回型別就是operat...

C 物件導向高階程式設計(下) 第一周

你現在設計乙個物件 class a,它可不可以被轉為另外一種型別,這就是一種轉換。或者是,另外一種型別可不可以轉為a。乙個是轉出去,乙個是轉進來,這兩個方向,我們都要談。現在首先談的是轉出去 1 轉化函式不可以有引數。轉換型別而已,那有什麼引數可言。2 轉化函式沒有返回型別,返回型別就是operat...

物件導向 初識物件導向

面向過程思想 步驟清晰簡單,第一步做什麼,第二步做什麼.面向過程適合處理一些較為簡單的問題 物件導向思想 物以類聚,分類的思維模式,思考問題首先會解決問題需要分哪些類,然後對這些類進行單獨思考,最後才是對某個分類下的細節進行面向過程的思索 物件導向適合處理複雜的問題,適合處理需要多人協作的問題 對於...