- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
是模板参数
面向对象程序设计——C++ 第七章 C++模板 C++ Template 第7章 模板与STL 模板(template)是C++实现代码重用机制的重要工具,是泛型技术(即与数据类型无关的通用程序设计技术)的基础。 模板在当前C++系统开发中很流行!!! 推荐书籍《C++ Template》 模板的概念 1、模板概念 模板是对函数或类的再次抽象,为逻辑功能相同而类型不同的程序提供一种代码共享的机制。 一个模板并非一个实实在在的函数或类,是函数或类的抽象,真正使用时被实例化为函数或者具体的类。 2、模板分类 函数模板 类模板 函数模板 回顾带参数的宏定义 #define max(x,y) ((x)(y) ? (x) : (y)) char ch = max(‘a’, ‘b’); char ch = ((‘a’)(‘b’)?(‘a’)(‘b’)) int i = max(2, 3); int i = ((2)(3)?(2):(3)); float f = max(5.0, 9); float f = ((5.0)(9)?(5.0):(9)) 函数模板 C++实现max可采用如下的重载方式 int max (int i, int j) {return ij ? i: j;} int max (char c1, char c2) {return c1c2 ? c1 : c2; } float max (float f1, float f2) {return f1f2 ? f1 : f2; } ……//可能得没完没了重载 int i = max (3, 4); char ch = max (‘a’, ‘A’); float f = max (5.0, 1.0); 函数模板 最好的办法是函数模板来实现 template class T T max (T a, T b){ return ab ? a : b;//只要类型支持的运算符操作 } int main(){ int i = max (3, 4); char ch = max (a, A); float f = max (5.0, 1.0); return 0; } 函数模板的定义 1、函数模板的定义template class T1, class T2,…返回类型 函数名(参数表){ //函数模板定义体 } template是定义模板的关键字;写在一对中的T1,T2,…是模板参数 class由于有自己的用途,通常用关键字typename 函数模板的定义 //求两数最小值的函数模板。 #include iostream using namespace std; template class T T min(T a,T b) { return (ab)?a:b; } void main(){ double a=2,b=3.4; float c=2.3,d=3.2; cout2,3 的最小值是:min(2,3)endl; cout2,3.4 的最小值是:min(a,b)endl; couta,b的最小值是:min(a,b)endl; cout2.3,3.2的最小值是:min(c,d)endl; } 函数模板的定义 2、使用函数模板的注意事项 在定义模板时,不允许template语句与函数模板定义之间有任何其他语句。 template class T int x; //错误,不允许在此位置有任何语句 T min(T a,T b){…} 函数模板的类型参数用class或者typename指定,用确定类型定义的称为非类型参数: template class T1,class T2,class T3,int T4 T1 fx(T1 a, T 2 b, T3 c){…} 在传递实参时,非类型参数T4只能使用常量,如6 函数模板的定义 #include iostream using namespace std; templatetypename T1, int a void f1(T1 a) { coutaendl; } int main() { f1int, 1(6);//对 //f1double, int(5.0);//错 return 0; } 类模板 类模板可用来设计结构和成员函数完全相同,但所处理的数据类型不同的通用类。如栈,存在 双精度栈: class doubleStack{ private: double data[size]; …… }; 字符栈: class charStack{ private: char data[size]; …… }; 类模板的定义 1、类模板的声明 tem
文档评论(0)