1.c++類 --用戶定義的類型(user-defined type, UDT)
2.信息隱藏(information hiding)
3.除了靜態數據成員外, 數據成員不能在類中被顯示地初始化
4.一個成員函數只能重載自己類的其他成員函數
5.數據隱藏的優點:
如果數據的訪問屬性是私有的, 則一般除了類的共有接口, 不能直接訪問私有成員
如果數據的訪問屬性是共有的, 則任何地方都可以直接訪問這個數據成員
但是, 如果類的實現變動了, 即那個成員改變了, 那么, 如果這個成員是私有的, 但共有接口沒改變, 則不需要修改使用這個類的代碼
如果這個成員是共有的, 那么, 直接訪問這個成員的任何代碼都需要做相應的改變了
--所以, 數據封裝性自有它的優點
6.訪問限定符(access specifier) public, private, protected
7.在某些情況下, 允許某個函數而不是整個程序可以訪問類的私有成員, 這樣做會比較方便, 友元(friend)機制允許一個類授權其他的函數訪問他的非公有
成員
8.友元聲明以關鍵字friend開頭, 只能出現在類的聲明中
9.因為只有當一個類的類體已經完整時, 它才被視為已經被定義, 所以一個類不能有自身類型的數據成員, 但可以用指向自身類型的指針或引用作為數據成
員
10.類的定義不會引起存儲區分配, 只有當定義一個類的對象時, 系統才會分配存儲區
11.每個類成員函數的拷貝只有一份
12.把一個成員函數聲明為const可以保證這個成員函數不修改類的數據成員, 但是, 如果該類含有指針, 那么在const成員函數中就能修改指針所指的對象,
編譯器不會檢測為錯誤, 這常常令c++初學者吃驚
13.為了允許修改一個類的數據成員, 即使它是一個const對象的數據成員, 我們也可以把改數據成員聲明為mutable(易變的). mutable數據成員永遠不會是
const成員, mutable成員中可以被更新
14.每個類成員函數都含有一個指向被調用對象的指針, 這個指針被稱為this:
在非const成員函數中, 它的類型是指向該類類型的指針
在const成員函數中, 是指向const類類型的指針
在volatile成員函數中, 是指向volatile類類型的指針
15.類的靜態成員被當做該類類型的全局對象, 對于非靜態成員, 每個類對象都有自己的拷貝, 而靜態數據成員對每個類類型只有一個拷貝, 靜態數據成員只
有一份, 該類類型對所有對象共享訪問
16.同全局對象相比, 使用靜態數據成員有兩個優勢:
靜態數據成員沒有進入程序的全局名字空間
可以實現信息隱藏, 靜態成員可以是private成員, 而全局對象不能
17.靜態數據成員的類型可以是其他所屬類, 而非static數據成員只能被聲明為該類的對象的指針或引用
18.靜態數據成員可以被作為類成員函數的缺省實參, 而非static成員不能
19.靜態成員函數的聲明除了在類體中的函數聲明加上關鍵字static, 以及不能聲明為const或volatile之外, 與非靜態成員函數相同, 出現在類體外的函數
定義不能指定關鍵字static
20.靜態成員沒有this指針
21.類成員的指針必須總是通過特定的對象或指向該類類型的對象的指針來訪問
針對類對象和引用的.*
針對指向類對象的指針的->*
22.定義一個成員函數指針需要制定函數返回類型, 參數表和類:
int (CTest::*)();
int (CTest::*pmf)() = &CTest::test;
pmf = &CTest::test2;
23.靜態類成員屬于該類的全局對象和函數
24.聯合:一種節省空間的類
使用union是危險的, 通過一個不適當的數據成員以為的獲取到當前存儲在union中的值]
25.c++標準庫提供了一個bitset類模板, 它可以輔助操作位的集合, 在可能的情況下, 應盡可能使用它來取代位域
26.一個類可以在另一個類中定義, 這樣的類被稱為嵌套類(nested class)
嵌套類是其外圍類的一個成員
27.類也可以定義在函數體內, 這樣的類被稱為局部類(local class)
局部類的成員函數必須被定義在類定義中, 這就把局部類的成員函數的復雜性限制在幾行代碼中