C++模板
来源:互联网 发布:java多线程异常处理 编辑:程序博客网 时间:2024/04/30 07:35
C++中模板的介绍:
1、模板的概念
模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。模板可以分为两类,一个是函数模板,另一个就是类模板。
2、函数模板的写法
函数模板的一般形式如下:
Template <class或者也可以用typename T>返回类型 函数名(形参表){//函数定义体 }
说明:template是声明模板的关键字,表示声明了一个模板,关键字class不能省略。
例如:
template < class T>T Sum(T x, T y){ return x + y; }相当于同时声明了许多名字都为Sum的函数,但是输入输出的数据类型未定,可以是int、float、double、或char,真正的函数定义要由编译器判定实际使用的数据类型后才完成。
另外,函数模板常常可以用来取代函数的重载,例如:
template < class T>T Abs(T x){ return (x>0)?x:-x; }相当于同时定义了
int Abs(int x){ return (x>0) ? x : -x; }double Abs(double x){ return (x>0) ? x : -x; }float Abs(float x){ return (x>0) ? x : -x; }3个函数。
****************
看下例:
#include "stdafx.h"#include <iostream>using std::cout;using std::endl;//声明一个函数模版,用来比较输入的两个相同数据类型的参数的大小,class也可以被typename代替,//T可以被任何字母或者数字代替。template <class T>T min(T x, T y){return(x < y) ? x : y;}void main(){int n1 = 2, n2 = 10;double d1 = 1.5, d2 = 5.6;cout << "较小整数:" << min(n1, n2) << endl;cout << "较小实数:" << min(d1, d2) << endl;system("PAUSE");}
程序分析:调用min(n1,n2)即实例化函数模板中T的类型为int型;同理min(d1,d2)实例化为double型,求出d1,d2的最小值。
3、类模板的写法
定义一个类模板
Template < class或者也可以用typename T >class类名{//类定义......};说明:其中,template是声明各模板的关键字,表示声明一个模板,模板参数可以是一个,也可以是多个。
例子:
// Header.h
<pre name="code" class="cpp">#ifndef ClassTemplate_HH#define ClassTemplate_HHtemplate<typename T1, typename T2>class myClass{private:T1 I;T2 J;public:myClass(T1 a, T2 b);//Constructorvoid show();};//这是构造函数//注意这些格式template <typename T1, typename T2>myClass<T1, T2>::myClass(T1 a, T2 b) :I(a), J(b){}//这是void show();template <typename T1, typename T2>void myClass<T1, T2>::show(){cout << "I=" << I << ", J=" << J << endl;}#endif
// Test.cpp
// Test.cpp#include "stdafx.h"#include <iostream>#include "Header.h"using std::cout;using std::endl;void main(){myClass<int, int> class1(3, 5);class1.show();myClass<int, char> class2(3, 'a');class2.show();myClass<double, int> class3(2.9, 10);class3.show();system("PAUSE");}输出:
0 0
- C++-模板
- C++-模板
- C++:模板
- C++:模板
- C++:模板
- 模板 (C++)
- C ++ 模板
- C ++ 模板
- 【C++】模板
- c++----------模板
- C++--------------------------------------------模板
- c++--模板
- C++:模板
- 【基础C&C++】模板
- 【c/c++】类模板
- 【C/C++】模板类
- 【c++】模板和模板类
- C/C++:函数模板与类模板
- 内容提供者
- 3D touch 之 Home Screen Quick Action 的创建
- Android之checkbox使用
- 千里之行始于足下
- 广电计量检测基地建设情况(2015年)
- C++模板
- radiobutton的使用
- Linux下Sublime Text 2的安装
- 动态调整(springMVC+slf4j)log等级(DEBUG/INFO/WARN/ERROR)
- tomcat--Poller creation failed
- LeetCode -- Valid Parentheses
- [成也Java,败也Java]之[成也Java]
- ios9 数据请求需要在info.plist文件中添加一个字符串
- [解决异常] spring batch 报错 ORA-08177: 无法连续访问此事务处理