C++ 入門指南 - 建構子

函數 (function) 可以有多個參數 (parameter) 版本,建構子 (constructor) 亦同。多個參數版本的函數稱為多載函數 (overloaded function)




函數只能有一個回傳值 (return value) ,卻可以有多個參數版本,這是因為很多時候都得處理不同的情況,不同情況需要的參數大多也不同。


由於 Demo 有兩個變數成員 ab ,因此我們打算設置三種建構子的參數版本,分別是沒有參數、一個參數及兩個參數
Demo();
Demo(int n);
Demo(int n1, int n2);


沒有參數的建構子直接將 ab 都設定為整數 1 ,一個參數的建構子將 ab 都設定為參數值,至於兩個參數的建構子, a 設定為第一個參數, b 設定為第二個參數
Demo::Demo() {
    a = 1;
    b = 1;
}

Demo::Demo(int n) {
    a = n;
    b = n;
}

Demo::Demo(int n1, int n2) {
    a = n1;
    b = n2;
}


我們寫成完整範例如下
#include <iostream>

using namespace std;

class Demo {
public:
    Demo();
    Demo(int n);
    Demo(int n1, int n2);
    void setA(int n);
    void setB(int n);
    int getA();
    int getB();
    int do_something();

private:
    int a;
    int b;
};

Demo::Demo() {
    a = 1;
    b = 1;
}

Demo::Demo(int n) {
    a = n;
    b = n;
}

Demo::Demo(int n1, int n2) {
    a = n1;
    b = n2;
}

int Demo::do_something() {
    return getA() + getB();
}

void Demo::setA(int n) {
    a = n;
}

void Demo::setB(int n) {
    b = n;
}

int Demo::getA() {
    return a;
}

int Demo::getB() {
    return b;
}

int main(void) {
    Demo t1;
    Demo t2(11);
    Demo t3(11, 22);
 
    cout << endl;
    cout << t1.do_something() << endl;
    cout << t2.do_something() << endl;
    cout << t3.do_something() << endl;
    cout << endl;
    
    return 0;
}

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


利用建構子建立物件 (object) 變數 (variable) ,宣告時加小括弧即可,需要留意沒有參數的建構子不需要加小括弧
Demo t1;
Demo t2(11);
Demo t3(11, 22);


編譯執行結果如下



我們現在是把程式碼統統放在同一個檔案中,程式碼擠在一起不是很好閱讀,如果發展大型程式更是落落長,接下來我們將看到介面與實作分開,學習更有效的組織程式檔案。


中英文術語對照
函數function
參數parameter
建構子constructor
多載函數overloaded function
回傳值return value
物件object
變數variable


您可以繼續參考
基礎篇


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


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

1 則留言:

Unknown 提到...

寫得很淺顯易懂..
可能是用數字的關係..
我自己買的書的案例是用文字..
搞得我好複雜..
不知作者能不能教學一下用文字的方式來設定建構子?
非常感謝~