C++ 速查手冊

9.1 - 建構函數

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

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

#include <iostream>
  
class Demo {
public:
    int a;
    int b;
    
    Demo() {
        std::cout << "constructor.." << std::endl;
        a = 22;
        b = 33;
    }
    
    int do_something() {
        return a + b;
    }
};

int main() {
    Demo d;
    std::cout << d.do_something() << std::endl;
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
   https://kaiching.org/
   檔名:u0901_1.cpp
   功能:示範 C++ 的類別
   作者:張凱慶*/

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

編譯執行,結果如下

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

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

#include <iostream>
  
class Demo2 {
public:
    int a;
    int b;
    
    Demo2() {
        a = 22;
        b = 33;
    }
    
    Demo2(int pa, int pb) {
        a = pa;
        b = pb;
    }
    
    int do_something() {
        return a + b;
    }
};

int main() {
    Demo2 d(33, 44);
    std::cout << d.do_something() << std::endl;
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
   https://kaiching.org/
   檔名:u0901_2.cpp
   功能:示範 C++ 的類別
   作者:張凱慶*/

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

Demo2(int pa, int pb) {
    a = pa;
    b = pb;
}

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

Demo2 d(33, 44);

編譯執行,結果如下

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

上一頁 單元 9 - 類別
回 C++ 速查手冊首頁
下一頁 9.2 - 初值串列
回 C++ 教材
回程式語言教材首頁