iT邦幫忙

1

【c/c++學習筆記】類別模版class templete

c++

今天介紹一個跟【c/c++學習筆記】函數模版function templete非常相似的概念,
一樣是讓我們可以在class內放入不同的型別甚至是自定義的類別,
譬如說函式庫<vector>其實就用到這個概念,
宣告一個vector時,
你可以在裡面裝入int
或裝入一個vector<int>
或放進一個自定義的class都行

vector<int> vec1;
vector<vector<int> > vec2;

例子: 自定類別- Printer

假設我們寫了一個類別Printer,
功能就是很無聊的把一個int傳進Printer裡,
可以換行把它印出來

class Printer 
{
private:
    int value;
public:
    Printer(int v):value(v){};
    void print(){
        cout<<value<<endl;
    }
};

但是我們可能不只想印int
我們還想印floatdouble等其它型態,
就可以用templete改寫,
大致像這樣

template <typename T>
class Printer 
{
private:
    T value;
public:
    Printer(T v):value(v){};
    void print(){
        cout<<value<<endl;
    }
};

注意若我們把Printer 裡面的print函數移至class外定義的話,
不能像我們平常寫class一樣單純這樣寫:

void Printer::print(){
    cout<<value<<endl;
}

而必須也加入template <typename T>才行,
Printer後面需要加<T>表示這個class是有使用模版的

template <typename T>
void Printer<T>::print(){
    cout<<value<<endl;
}

完整程式碼範例

#include <iostream>
#include <vector>
using namespace std;

template <typename T>
class Printer 
{
private:
    T value;
public:
    Printer(T v):value(v){};
    void print();
};

template <typename T>
void Printer<T>::print(){
    cout<<value<<endl;
}

int main()
{
    Printer<double> obj(3.5);
    obj.print();
    return 0;
}

參考資料

  1. 東方和風語: c++ template學習筆記

尚未有邦友留言

立即登入留言