1.修改const物件的任何企圖在編譯時就會被發現,而不是等到執行期才導致錯誤。
2.將變數和物件宣告為const可以提高效能,編譯器可以對常量提供某些相對變數來說不能提供的優化。
3.對於const物件,c++編譯器不允許進行成員函式的呼叫,除非成員函式本身也宣告為const。
4.要將函式指定為const的,則既要在其原型中指定,又要在其定義中指定。方法是在函式引數列表後和函式開始的左花括號(對定義來 說)前插入關鍵字const。如:int gethour() const {}。
5.將修改物件的資料成員的成員函式定義為const將導致編譯錯誤。
6.定義為const的成員函式如果又呼叫同一類的同一例項的非const成員函式,將導致編譯錯誤。
7.可以對const成員函式進行非const版本的過載。編譯器將根據呼叫函式的物件性質選擇相應的過載函式來使用。
8.建構函式和析構函式都會修改物件,所以不能將它們宣告為const。
9.const資料成員和引用的資料成員必須使用成員初始化器進行初始化。最好將所有執行時不修改物件的成員函式都宣告為const。
10.組成:即乙個類將其他類的物件作為成員。
11.當乙個類的成員初始化器初始化作為成員的其他類的物件時:編譯器提供給每個類乙個預設的複製建構函式,該函式將建構函式的參 數物件的每個成員複製給將要初始化的物件的相應成員。
12.物件是由內而外進行建立,而撤銷是按相反的順序(即,date成員物件在包含它們的employee物件撤銷後再撤銷)。
13.類型別成員的物件必須是private的,就像其他資料成員一樣。
14.類的friend函式在類的作用域外定義,卻具有訪問類的非public成員的許可權。單獨的函式或整個類都可以被宣告為另乙個類的友元。
15.即使friend函式的原型在類定義內出現,友元仍不是成員函式。
16.使用this指標:在乙個類中,所有的物件的成員函式是公共的,那麼,成員函式如何知道哪個物件的資料成員要被操作呢?每個物件
都可以使用乙個稱為this的指標來訪問自己的位址。物件的this指標不是物件的一部分,也就是this指標占用的記憶體大小不會反映在
對物件進行sizeof運算得到的結果中。相反,this指標作為乙個隱式的引數(被編譯器)傳遞給物件的每個非static成員函式。
17.this指標的型別取決於物件的型別及使用this的成員函式是否被宣告為const。例如,在employee類的非const成員函式中,this指標
具有的型別是employee *const(乙個指向非const employee物件的const指標)。可使在employee類的const成員函式中,this指標
具有的型別卻為const employee *const(指向乙個const employee物件的const指標)。
18.this指標的另一種用法是使串聯的成員函式呼叫成為可能。
19.預設的建構函式:將私有的資料成員初始化為預設的值,可以在呼叫時不帶任何實參。每個類最多只有乙個預設建構函式。
20.static類成員:僅有變數的乙份副本供類的所有物件共享。這樣的變數表示了「整個類範圍意義上」的資訊。
21.基本型別的static資料成員預設情況下將初始化為0.int或者列舉型別的const static資料成員可以在類定義中的宣告處初始化。但是,所有其他static資料成員必須在檔案作用域(換言之,在類定義體之外)進行定義,並只能在那些定義中初始化。
22.即使不存在已例項化的類的物件,類的static資料成員和static成員函式仍存在並且可以使用。staitc成員函式只能訪問類的static資料成員
23.當沒有類的物件存在而要訪問private或protected的static類成員時,應提供public static成員函式,並通過在函式名前加類名和二元作用域分辨符的方式來呼叫此類函式。如:employee::getcount()。
24.static成員函式不具有this指標。
25.不可過載的運算子:成員運算子(.),作用域運算子(::),條件運算子(?:),(.*)。
26.過載不能改變運算子的優先順序,不能改變運算子的結合律,不能改變運算子的「元數」。
27.運算子函式的引數至少有乙個必須是使用者自定義型別的物件或引用。這樣使程式設計師不能改變運算子作用在基本型別上的方式。如,程式設計師不能改變+運算子用於兩個整數相加時的含義。
28.當運算子函式作為成員函式實現時,最左邊(或者只有最左邊)的運算元必須是運算子的乙個類物件(或引用)。如果左運算元必須
是乙個不同類的物件或者是乙個基本型別物件,那麼該運算子函式必須作為全域性函式來實現(如流插入和流提取運算子)。如果全域性
運算子函式必須直接訪問類的private或protected成員,那麼該函式可以指定成該類的友元函式。
29.istream &input; string areacode; input >> setw(3) >> areacode; input.ignore(); setw(3)允許讀入三個字元。ignore函式丟棄輸入流中指定個數的字元(預設為乙個)。
30.不需要修改c++的標準輸入/輸出類庫,就能把全新的使用者自定義型別的輸入/輸出特性新增到c++中。這是c++程式語言可擴充套件性的又 乙個例證。
31.過載一元運算子:
類的一元運算子可以過載為不帶引數的非static成員函式或者帶有乙個引數的全域性函式。全域性函式的引數必須是該類的物件或者引用。
當過載成不帶引數的成員函式且編譯器遇到表示式!s時,編譯器就會生成函式呼叫s.operator!()。宣告如下:class string;
當過載為全域性函式時,編譯器就會生成函式呼叫operator!(s)。宣告如下:bool operator!(const string &);
32.類的二元運算子可以過載為帶有乙個引數的非static成員函式或者兩個引數(其中乙個必須是類的物件或引用)的全域性函式。
當宣告為成員函式時:class string; y當宣告為全域性函式時:bool operator<(const string &, const string &); y**:
程式設計師教程第五版筆記
r進製與十進位制轉化 r進製轉化為十進位制的方法是 將r進製數的每一位數乘以它的權,然後相加。十進位制轉化為r進製的方法是 整數部分使用 除r取餘 小數部分 乘r取整 二進位制與八進位制的轉化 二進位制轉化為八進位制時,從小數點開始,每三位二進位制數為一組 不足三位時,在小數點左邊時左邊補0,在小數...
《C程式設計(第五版)》譚浩強編著 習題 第五章
include include intmain 最大公約數 for i a i 1 i 最小公倍數 for j b j a b j printf 最大公約數為 d n maxdivisor printf 最小公倍數為 d n 英文本母個數為 d n letter printf 空格個數為 d n s...
c 入門經典第五版讀書筆記
今年要帶純軟體的專案,我這個硬體工程師要開始學習c 語言了。我站在乙個只會c和c 的基礎上對該書進行總結。廢話不說了,直奔主題。第一章講的c 和.net框架的關係。我的理解.net就是給c 做好了庫函式,讓c 直接呼叫就行了。呵呵 從第二章開始到第六章講了變數,表示式,流程控制和函式,基本所有程式語...