structures)的一個擴展概念。類()是一種將數據和函數組織在同一個結構裡的邏輯方法。其功能與C語言中的 struct 類似,不同之處是 可以, struct 。定義類的關鍵字為 或關鍵字 。
class_name{
access_specifier_1:
(access specifier)或(permission labels),范圍標志可以是以下三個關鍵字中任意一個:
為 范圍。例如:
Rectangle{
width, height;
:
set_values(, );
area(void);
注意 class名稱與對象(object)名稱的不同:在上面的例子中,Rectangle 是class 名稱 (即用戶定義的類型名稱),而rect 是一個 Rectangle 類型的對象名稱。它們的區別就像下面例子中類型名 int和 變量名a 的區別一樣:
a;
.”(dot) 使用C structs一樣),來引用對象rect 的任何public成員,就像它們只是一般的函數或變量。例如:
std; Rectangle { width, height; : set_values (, ); area() { width*height;} }; Rectangle::set_values ( x, y) { width = x; height = y; } main () { Rectangle rect; rect.set_values (3,4); cout << "area: " << rect.area(); 0; }
(雙冒號 )。它是用來在一個 class 之外定義該 class 的成員。注意,我們在Rectangle class 內部已經定義了函數 area() 的具體操作,因為這個函數非常簡單。而對函數 set_values() ,在 class 內部只是定義了它的原型(prototype),而其實現是在 class 之外定義的。這種在 class 之外定義其成員的情況必須使用。
() 聲明了被定義的成員所屬的 class 名稱,並賦予被定義成員適當的范圍屬性,這些范圍屬性與在 class 內部定義成員的屬性是一樣的。例如,在上面的例子中,我們在函數 set_values() 中引用了private 變量 width 和 height,這些變量只有在 class 內部和它的成員中才是可見的。
(參考inline的小知識) 考慮,而在第二種情況下,函數只是一般的class成員函數。在行為上相同,但在編譯器優化的可能性上不同。
的屬性是,它是一個,因此我們可以用它來定義多個不同對象(object)。例如,接著上面class Rectangle的例子,除了對象rect之外,我們還可以定義對象rectb :
std; Rectangle { width, height; : set_values (, ); area () { width*height;} }; Rectangle::set_values ( x, y) { width = x; height = y; } main () { Rectangle rect, rectb; rect.set_values (3,4); rectb.set_values (5,6); cout << "rect area: " << rect.area() << endl; cout << "rectb area: " << rectb.area() << endl; 0; }
注意: 調用函數 rect.area() 與調用 rectb.area()所得到的結果是不一樣的。這是因為每一個 class Rectangle 的對象都擁有它自己的變量 width 和 height,以及它自己的函數set_values() 和 area()。
(properties),而不是像以前在結構化編程 (structured programming) 中所認為的對象(object)是函數參數。我們在以後的內容裡慢慢討論面向對象的好處。