《C++ Primer (V4)》讀書筆記

第2章 變量和基本類型編程

1.(P56)若是使用class關鍵字來定義類,那麼定義在第一個訪問標號前的任何成員都隱式指定爲private;若是使用struct關鍵字,那麼這些成員都是public數組

第7章 函數函數

1.數組有兩個特殊的性質,影響咱們定義和使用做用在數組上的函數:一是不能複製數組(4.1.1節);二是使用數組名字時,數組名會自動轉化爲指向其第一個元素的指針。測試

2.當編譯器檢查數組形參關聯的實參時,它只會檢查實參是否是指針、指針的類型和數組元素的類型是否匹配,而不會檢查數組的長度。spa

3.數組形參可聲明爲數組的引用。若是形參是數組的引用,編譯器不會將數組實參轉化爲指針,而是傳遞數組的引用自己。在這種狀況下,數組大小成爲形參和實參類型的一部分。編譯器檢查數組實參的大小與形參的大小是否匹配。指針

void printValues(int (&arr)[10]) {/*...*/}
int main() {
    int i = 0, j[2] = {0,1};
    int k[10] = {0,1,2,3,4,5,6,7,8,9};
    printValues(&i);    //error
    printValues(j);      //error
    printValues(k);     //ok:argument is an array of 10
}

 

第15章 面向對象編程code

1.(P485)使用class保留字定義的派生類默認具備private繼承,而使用struct保留字定義的類默認具備public繼承對象

2.(P484)爲了使size在Derived中成爲public,能夠在Derived的public部分增長一個using聲明blog

3.(P485)儘管私有繼承在使用class保留字時是默認狀況,但這在實踐中相對罕見。繼承

4.(P486)友元關係不能繼承。

5.(P488)引用轉換不一樣於轉換對象。①能夠將派生類型的對象傳遞給但願接受基類引用的函數時,引用直接綁定到該對象,雖然看起來在傳遞對象,實際上實參是該對象的引用,對象自己未被複制,轉換不會再任何方面改變派生類型對象,該對象仍然是派生類型對象。②將派生類對象傳遞給但願接受基類類型對象(而不是引用)的函數時,該派生類對象的基類部分被複制到形參。

6.(P491)派生類構造函數經過將基類包含在構造函數初始化列表中來間接初始化繼承成員(不能直接初始化繼承成員)。初始化列表不指定初始化的執行次序,首先初始化基類,而後根據聲明初始化派生類的成員。

第16章 模版與泛型編程

1.(P530)若是是類型形參,咱們就知道該形參表示未知類型,若是是非類型形參,咱們就知道它是一個未知值。

2.(P530)與全局做用域中聲明的對象,函數或類型同名的模版形參會屏蔽全局名字。

3.(P530)用做模版形參的名字不能在同一模版內部重用。

4.(P531)對於模版能夠只聲明而不定義,在同一模版的聲明和定義中,模版形參的名字沒必要相同。

template <class T> T calc(const T&, const T&);
template <class U> U calc(const U&, const U&);

   省略關鍵字或類型說明符是錯誤的:

template <class T, U> T calc(const T&, const U&);  //error

 5.(P352)在函數模版形參表中,關鍵字typename和class具備相同含義,能夠互換使用,兩個關鍵字均可以在同一模版形參表中使用。可是,關鍵字typename是做爲標準C++的組成部分加入到C++中的,所以舊的程序更有可能只用關鍵字class。

6.(P532)在模版定義內部指定類型:經過在成員前加上關鍵字typename做爲前綴,能夠告訴編譯器將成員看成類型。

template <class Parm, class U> 
Parm fcn(Parm *array, U value) {
    typename Parm::size_type *p;
    ...      
}

這些聲明給用來實例化fcn的類型增長了一個職責:那些類型必須具備名爲size_type的成員,並且該成員是一個類型。

 7.(P533)非類型形參:

template <class T, size_t N> 
void array_init(T (parm&)[N]) {
    for(size_t i = 0; i != 0; ++i)
        parm[i] = 0;
}

當調用array_init時,編譯器從數組實參計算非類型形參的值:

int x[42];
double y[10];
array_init(x);
array_init(y);

8.(P534)泛型編程的兩個重要原則:模版的形參是const引用;函數體中的測試只用<比較。

相關文章
相關標籤/搜索