C++ 入門指南 - 類別

類別 (class) 用來設計自己需要的物件 (object) ,這是說,類別是物件的模板。 C++ 中設計類別使用關鍵字 (keyword) class ,後面接大括弧宣告 (declare) 類別的成員 (member)




類別成員可以是資料 (data) 、函數 (function) 與建構子 (constructor) ,資料其實就是專屬於類別的變數 (variable) ,我們在這裡沿用 C++ 的習慣稱之為成員變數 (member variable) ,同樣的,函數也是專屬於類別的,稱之為成員函數 (member function) ,至於建構子屬於特別的成員函數,用來建立該類別物件的專屬函數。


因為建構子用來建立物件,所以建構子沒有回傳值,或著可以這麼想像,建構子預設回傳物件自己本身,因此無須宣告回傳值 (return value) 。


另外,類別定義必須利用存取標籤 (access label) publicprivate 將成員歸類,屬於 public 的成員可以在程式中的任何地方存取, private 則只能在類別裡。


還有另一個存取標籤 protected ,不過這不在我們目前的討論範圍。


我們舉一例如下
#include <iostream>

using namespace std;

class Demo {
public:
    int a;
    int b;
    int do_something();
};

int Demo::do_something() {
    return a + b;
}

int main(void) {
    Demo t;
    t.a = 11;
    t.b = 22;
 
    cout << endl;
    cout << t.do_something() << endl;
    cout << endl;
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:classdemo.cpp
    功能:示範 C++ 程式 
    作者:張凱慶
    時間:西元 2012 年 10 月 */


此例中的 Demo 類別宣告三個 public 成員, ab 為成員變數, do_something() 為成員函數,記得, class 大括弧的最後要加上分號
class Demo {
public:
    int a;
    int b;
    int do_something();
};


底下為實作 Demo 類別的 do_something() 成員函數
int Demo::do_something() {
    return a + b;
}


do_something() 的工作很簡單,就是回傳兩個成員變數 ab 的相加值。這裡須注意定義成員函數時,必須在成員函數名稱前加上所屬類別名稱接兩個冒號
Demo::do_something()


這是標明 do_something() 是屬於 Demo 類別的,連續兩個冒號 :: 為作用域運算子 (scope operator) 。沒有這樣寫的話,編譯器 (compiler) 會把 do_something() 當成普通的函數處理。


下面的 main() 直接用小數點運算子設定 ab ,然後印出呼叫 do_something() 的結果
int main(void) {
    Demo t;
    t.a = 11;
    t.b = 22;
 
    cout << endl;
    cout << t.do_something() << endl;
    cout << endl;
    
    return 0;
}


編譯執行看看結果吧



這個例子我們只用 public ,接下來我們要繼續介紹 private ,將資料有效的封裝 (encapsulation) 在物件裡。


中英文術語對照
類別class
物件object
關鍵字keyword
宣告declare
成員member
資料data
函數function
建構子constructor
變數variable
成員變數member variable
成員函數member function
回傳值return value
存取標籤access label
作用域運算子scope operator
編譯器compiler
封裝encapsulation


您可以繼續參考
基礎篇


相關目錄
回 C++ 入門指南
回 C++ 教材目錄
回首頁


參考資料
http://www.cplusplus.com/doc/tutorial/classes/
http://www.cplusplus.com/doc/tutorial/classes2/

4 則留言:

Unknown 提到...

::是冒號

Kaiching Chang 提到...

打錯字,已修改,感謝指正 :)

Unknown 提到...

accsee
access

Kaiching Chang 提到...

這邊打錯字了,已修改,感謝指正 :)