本站電子書

您可以在這些電子書店找到本站電子書: Google Play 圖書iBooks StoreHyReadReadmooPubu
===>>>本站推出學習遊戲意見調查<<<===《如何自學程式設計》入選 Google Play 台灣地區2016年度最佳書籍

C++ 速查手冊 V1.00 - 單元 9 - 類別




類別 (class) 是物件 (object) 的模板,物件的所有功能都由類別設置。


典型的類別設計如下


    class class_name {
    access_label_1:
       // member
   
    access_label_2:
       // member
    };

利用關鍵字 (keyword) class 宣告類別名稱,其後的大括弧為類別的宣告內容,裡頭用存取標籤 (access label) 區分成員 (member) 的權限。存取標籤有三種,分別是 publicprivateprotected ,這三個標籤也都屬於關鍵字。


public 成員可以由所有使用物件的地方自由呼叫, private 成員則限制在類別中呼叫,也就是類別的成員才可以使用 private 成員, protected 成員的使用範圍與 private 成員相同,但是 private 成員不能被繼承 (inheritance) , protected 成員則可以被繼承。


如果在類別宣告中沒有寫存取標籤的話,預設為 private

使用 private 成員可達到把資料封裝 (encapsulation) 的目的,此為物件導向程式設計 (object-oriented programming) 的主要特性之一。

成員可以是變數 (variable) 或函數 (function) ,前者稱為資料成員 (data member) ,這是專屬於物件的變數,後者則稱之為成員函數 (member function) ,這也是專屬於物件的函數,需要透過物件進行呼叫。


注意,大括弧最後的分號是必須的。舉一例如下


001 #include <iostream>
002
003 class Demo {
004 public:
005    int a;
006    int b;
007    
008    int do_something() {
009       return a + b;
010    }
011 };
012
013 int main() {
014    Demo d;
015    d.a = 11;
016    d.b = 22;
017    std::cout << d.do_something()
018              << std::endl;
019
020    return 0;
021 }
022  
023 /* Kaiching Chang 
024    u09.cpp
025    2014-02 */

此例宣告了類別 Demo ,裡頭有三個成員,兩個 int 變數與一個回傳 int 的函數


003 class Demo {
004 public:
005    int a;
006    int b;
007    
008    int do_something() {
009       return a + b;
010    }
011 };

然後在 main() 宣告 Demo 型態的變數 d ,此時 Demo 型態的物件 d 已建立,接著再用小數點運算子設定兩個資料成員


014 Demo d;
015 d.a = 11;
016 d.b = 22;

編譯執行,結果如下


$ g++ u09.cpp
$ ./a.out
33
$

我們是把成員函數的定義放到類別宣告中,成員函數的定義可以移出類別宣告,這樣的類別宣告就是單純的宣告


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

這樣成員函數的實作就移出類別宣告外,在函數名稱前要加上類別名稱與作用域運算子,如下


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

通常類別的宣告會放到標頭檔裡,而成員函數的實作會放到實作檔中。

下面我們分成數個部分介紹 C++ 的類別



continue ...

1 則留言:

郭嘉模 提到...

"但是 private 成員不能被繼承 (inheritance) , protected 成員則可以被繼承。"
private 成員一樣被繼承,只是不能被直接取用吧!