1、成員可以是資料,函數或類型别名(typedef定義的)。
2、const必須同時出現在聲明和定義中。
3、重載的成員函數和普通函數應用相同的規則:兩個重載成員的形參數量和類型不能完全相同。也可以根據const來定義。
4、inline在聲明和定義處指定都是合法的。
5、可以聲明一個類而不定義它,這個聲明有時稱為前向聲明(forward declaration),聲明的類是一個不完全類型(incompete type)。
不完全類型隻能以有限方式使用。不能定義該類型的對象。不完全類型隻能用于定義指向該類型的指針及引用;或者用于聲明(而不是定義)使用該類型作為形參類型或傳回類型的函數。
一般用于編寫互相依賴的類。
6、為隻有當類定義體完成後才能定義類,是以類不能具有自身類型的資料成員。然而,隻要類名一出現就可以認為該類已聲明。是以,類的資料成員可以是指向自身類型的指針或引用。
7、成員函數不能定義this形參,由編譯器隐含指定。成員函數的函數體可以顯式使用this指針,但不是必須這麼做。
有一種情況必須使用:當我們需要一個對象作為整體引用而不是引用對象的一個成員時,如一個函數傳回調用該函數的對象的引用。
8、在非const成員函數中,this的類型是一個指向類類型的const指針。在const成員函數中,this的類型是一個指向const類類型對象的const指針。不能從const成員函數傳回指向類對象的普通引用,隻能傳回*this作為一個const引用。
const對象隻能使用const成員,非const對象可以使用任一成員。
9、我們希望類的資料成員(包括const成員函數)可以修改,可以把它們聲明為mutable。
10、一般的資料或函數成員必須通過對象來通路。定義類型的成員,則使用作用域操作符來通路。
11、形參表和函數體處于類作用域中;函數傳回類型不一定在類作用域中,如果函數在類定義體之外定義,則用于傳回類型的名字在類作用域之外。如果傳回類型使用由類定義的類型,則必須使用完全限定名。
12、名字必須在使用之前進行定義。而且一旦一個名字被用作類型名,該名字就不能被重複定義,與定義局部變量内層變量名覆寫外層變量名不同。
13、友元以friend聲明,它隻能出現在類定義的内部。一般把它放在類定義的開始或結尾是個好主意。
必須先定義包含成員函數的類,才能将成員函數設為友元。不必預先聲明類和非成員函數來将它們設為友元。
14、類必須将重載函數集中每一個希望設為友元的函數都聲明為友元。
(1) 友元的關系是單向的而不是雙向的。
(2) 友元的關系不能傳遞。(A是B的朋友,B是C的朋友,但不一定A是C的朋友)。
(3) 但是友元可以繼承(這是我在VS編譯器中測試的結果,在C++ Primier中說其不可以繼承)。
示例
參考
[1] 友元
<a href="http://blog.163.com/zhoumhan_0351/blog/static/39954227201002621251123/">http://blog.163.com/zhoumhan_0351/blog/static/39954227201002621251123/</a>
[2] 繼承
<a href="http://blog.163.com/zhoumhan_0351/blog/static/3995422720100284731826/">http://blog.163.com/zhoumhan_0351/blog/static/3995422720100284731826/</a>