C++ 快速導覽 - 類別樣版

類別樣版 (class template) 可定義適用多種型態 (type) 的類別 (class) ,而不需要多載 (overload) 適用各種情況的成員函數 (member function) 。



舉例如下
#include <iostream>

template <typename T> class Demo {
    public:
        Demo(const T &a, const T &b) {
            this->a = a;
            this->b = b;
        } 
        
        T do_something() {
            return a + b;
        }
    
    private:
        T a;
        T b;
};

int main(void) {
    Demo<int> d1(20, 25);
    std::cout << d1.do_something() << std::endl;
    Demo<double> d2(5.2, 3.95);
    std::cout << d2.do_something() << std::endl;
    Demo<char> d3('1', '2');
    std::cout << d3.do_something() << std::endl;
    
    return 0;
}

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


第 3 行定義函數樣版要先用關鍵字 (keyword) template 宣告是個樣版定義,然後是角括號圍起來的樣版參數列 (parameter list) ,使用 typename 宣告所用的型態名稱,底下成員函數的參數 (parameter) 要用 const 參考 (reference)
template <typename T> class Demo {
    public:
        Demo(const T &a, const T &b) {
            this->a = a;
            this->b = b;
        } 
        
        T do_something() {
            return a + b;
        }
    
    private:
        T a;
        T b;
};


typenameclass 替代也可以。


使用類別樣版宣告變數,也要用角括弧宣告 T 的實際型態
Demo<int> d1(20, 25);
std::cout << d1.do_something() << std::endl;
Demo<double> d2(5.2, 3.95);
std::cout << d2.do_something() << std::endl;
Demo<char> d3('1', '2');
std::cout << d3.do_something() << std::endl;


編譯執行結果如下



中英文術語對照
函數樣版function template
型態type
函數function
多載overload
關鍵字keyword
參數列parameter list
參數parameter
參考reference


您可以繼續參考
樣版


相關目錄
回 C++ 快速導覽
回 C++ 教材
回首頁


參考資料
C++ reference
cplusplus.com
Cprogramming.com C++ Tutorial

C++ Primer, Fourth Edition, Stanley B. Lippman...

沒有留言: