在這一周的課程裡,老師講解了許多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 templatesvaridic templates指數量不定的模板引數,如:
template
…就是乙個所謂的pack(包)
用於模板引數,就是模板引數包
用於函式引數,就是函式引數包
8.autoc++11中引入的auto主要有兩種用途:自動型別推斷和返回值佔位。auto在c++98中的標識臨時變數的語義,由於使用極少且多餘,在c++11中已被刪除。前後兩個標準的auto,完全是兩個概念。
auto自動型別推斷,用於從初始化表示式中推斷出變數的資料型別。通過auto的自動型別推斷,可以大大簡化我們的程式設計工作。
9.ranged-base forranged-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...
物件導向 初識物件導向
面向過程思想 步驟清晰簡單,第一步做什麼,第二步做什麼.面向過程適合處理一些較為簡單的問題 物件導向思想 物以類聚,分類的思維模式,思考問題首先會解決問題需要分哪些類,然後對這些類進行單獨思考,最後才是對某個分類下的細節進行面向過程的思索 物件導向適合處理複雜的問題,適合處理需要多人協作的問題 對於...