close

按此前往C++完整教學目錄

 

 

樣板類別:有些類別,其類別成員也是個類別物件,但其具體的型態是在建構時才能確定的。我們可以先宣樣板參數型別,然後利用此樣板參數型別宣告類別成員的資料形態。範例如下:

class jewelry // 建立一類別jewelry

{        

public:

    int price;

    string kind;

    jewelry(){}  //類別jewelry的備用建構式

    jewelry(string kind_,int price_)

{kind=kind_;price=price_;}

};

 

class car  // 建立一類別car

    public:

    int price;

    string kind;

    car(){}  //類別car的備用建構式

    car(string kind_,int price_)

{kind=kind_;price=price_;}

};

     

class art  // 建立一類別art

    public:

    int price;

    string kind;

    art(){}  //類別art的備用建構式

    art(string kind_,int price_)

{kind=kind_;price=price_;}

};

 

template <class Q>  //宣告樣板參數型別Q

class person   //建立樣板類別person

{

    public:

    string name;

    Q item;   //不定型別的類別成員,可以是jewelry, car或是art

    person(string name_,Q item_){name=name_;item=item_;}

    void get_item()

{cout<<name<<" have a "<<item.kind<<" worth "<<item.price<<endl;}

};

 

int main()  //程式在此

jewelry j1("ruby",500);

car c1("ford",600);

art a1("paint",700);

person<art> person1("thurmo",a1);  //建構樣板類別物件樣板類別名稱<欲指定的樣板參數型別> 樣板類別物件名稱 建構式

person1.get_item();  //顯示:thurmo have a paint worth 700

}

註一:以上例而言,若欲指定的樣板參數型別是個類別,則該類別一定要有備用建構式。否則會造成編譯錯誤。

註二:若某一類別是樣板類別,則要做一函式,其輸入參數是此樣板類別物件,則此函式的寫法應該是(以上例來看)

template <class Q>

void print_name(person<Q> p){cout<<p.name;} //函式當然應該定義在主程式之外

也就是說,在函式宣告之前應先宣告樣板參數型別,而類別名稱後也該加入樣板參數型別

 

 

上一篇:多參數樣板函式

下一篇:函式參數

arrow
arrow

    埃伯 發表在 痞客邦 留言(0) 人氣()