首页 > 代码库 > 14-类模板(上)
14-类模板(上)
一.类模板
C++中可以将模板的思想应用与类,使得类可以不关注具体所操作的数据类型,而只关注类所实现的功能。
C++中的类模板
---- 提供一种特殊的类以相同的行为处理不同的类型
---- 在类声明前使用template进行标识
---- <typename T>用于说明类中使用的泛指类型T
template<typename T> class Operator { public: T add(T a,T b) { return a+b; } T minus(T a,T b) { return a-b; } };
*:编译器对类模板的处理方式和函数模板相同
----- 编译器从类模板通过具体类型产生不同的类
----- 编译器在声明的地方对类模板代码本身进行编译
----- 编译器在使用的地方对参数替换后的代码进行编译
类模板的使用
---- 使用具体类型定义对象
Operator<int> op1;// op1用于int类型的加减法 Operator<double> op2;// op2用于double类型的加减法 cout<<op1.add(5,4)<<endl; cout<<op2.minus(1.5,0.02)<<endl;
类模板外部定义成员函数的实现时,需要加上 template<typename T>的声明
<pre name="code" class="cpp">template<typename T> class Operator { public: T add(T a,T b); T minus(T a,T b); }; template<typename T> T Operator<T>::add(T a,T b) { return a-b; } template<typename T> T Operator<T>::add(T a,T b) { return a-b; }
二. 类模板的特化
用template<> 声明一类时,表示这是一个特化类
//Test 类模板 template<typename T> class Test { public: T test(T v) { cout<<"T test(T v)"<<endl; cout<<"sizeof(T)="<<sizeof(T)<<endl; return v; } }; // Test 类模板的int特化 template<> class Test<int> { public: int test(int v) { cout<<"int test(v)"<<endl; cout<<"sizeof(int)="<<sizeof(int)<<endl; } };
特化类模板的意义
当类模板在处理某种特定类型有缺陷时,可以通过类模板的特化来克服处理这种特定类型带来的不足。
注意:
编译器优先选择特化类生成的对象!!!
14-类模板(上)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。