C++类模板简介

类模板:

  是对一批仅仅成员数据类型不同的类的抽象,程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类,(这类可以看作是类模板的实例),从而大大提高编程的效率。

------百度百科

• 格式:

  类模板的写法:

  template <class 类型参数1,class 类型参数2,...>  //类型参数表

  class 类模板名 {

    成员函数和成员变量

  };

  类模板里成员函数的写法:

  template <class 类型参数1,class 类型参数2,...>  //类型参数表

  返回值类型  类模板名 <类型参数名列表>::成员函数名(参数表) {

    ......

  }

  用类模板定义对象的写法:

  类模板名 <真实类型参数表>  对象名(构造函数实参表)

  

 1 #include <iostream>  
 2 #include <string>  
 3 using namespace std;  
 4 template <class T1, class T2>  
 5 class Pair {  
 6     public:  
 7         T1 key;     //关键字   
 8         T2 value;       //
 9         Pair(T1 k, T2 v):key(k), value(v) { };  
10         bool operator < (const Pair<T1, T2> & p) const;  
11 };   
12 template <class T1, class T2>  
13 bool Pair<T1, T2>::operator <(const Pair<T1, T2> & p) const {  
14     //Pair的成员函数 operator <   
15     return key < p.key;  
16 }  
17 int main(void)  
18 {  
19     Pair<string, int> student("Tom", 19);  
20     //实例化一个类 Pair<string, int>  
21     cout << student.key << ends << student.value <<endl;  //output:Tom 19   
22     return 0;  
23 }  

 编译器由类模板生成类的过程叫类模板的实例化。由类模板实例化得到的类,叫模板类。

 • 同一个类模板的两个模板类是不兼容的

   Pair <string, int> * p;Pair <string, double> a;p = & a;  //wrong 

• 函数模板作为类模板成员

 1 #include <iostream>
 2 using namespace std;
 3 template <class T>    //类模板 
 4 class A {
 5     public:
 6         template <class T2>        //成员函数模板 
 7         void Func(T2 t) {
 8             cout << t;
 9         }
10 };
11 int main(void)
12 {
13     A<int> a;
14     a.Func('K');        //成员函数模板Func被实例化 
15     a.Func("hello");    //成员函数模板Func再次被实例化 
16     return 0;    
17 }         //output:Khello 

• 类模板的“<类型参数表>”中可以出现非类型参数

template <class T, int size>
class CArray {
    private:
        T array[size];
    ......
};
CArray <double, 40> a2;
CArray <int, 20> a3;    //a2和a3属于不同的类

 

 

 

 

2018-01-25 15:13:22

转载于:https://www.cnblogs.com/kdjlyy/p/8344445.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值