C++ 速查手冊 V1.00 - 單元 9.1 - 建構函數




建構函數 (constructor) 是一種特別的成員函數,與類別同名並且沒有回傳值 (return value) ,因為這是在類別實際建立物件時執行的函數。如果自己沒有定義建構函數,編譯器 (compiler) 會補上預設的建構函數。


預設的建構函數是沒有參數 (parameter) 的函數版本,我們同樣舉個沒有參數的建構函數例子如下


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

此例的建構函數被呼叫時,會先印出英文訊息,然後設定兩個資料成員


編譯執行,結果如下


$ g++ u0901_1.cpp
$ ./a.out
constructor..
55
$

下例將 Demo 改寫成 Demo2 ,增加另一個有參數的建構函數


001 #include <iostream>
002
003 class Demo2 {
004 public:
005    int a;
006    int b;
007
008    Demo2() {
009       a = 22;
010       b = 33;
011    }
012
013    Demo2(int pa, int pb) {
014       a = pa;
015       b = pb;
016    }
017
018    int do_something() {
019       return a + b;
020    }
021 };
022
023 int main() {
024    Demo2 d(33, 44);
025    std::cout << d.do_something()
026              << std::endl;
027
028    return 0;
029 }
030  
031 /* Kaiching Chang 
032    u0901_2.cpp
033    2014-02 */

新版本的建構函數有兩個參數,分別用來設定兩個資料成員


013 Demo2(int pa, int pb) {
014    a = pa;
015    b = pb;
016 }

這樣宣告 Demo 型態的變數 d 時,就要用小括弧加上參數列 (parameter list)


024 Demo2 d(33, 44);

編譯執行,結果如下


$ g++ u0901_2.cpp
$ ./a.out
77
$

continue ...

沒有留言: