- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十一章 模板
第十一章 模版;11.1 从类属到模板 ;11.1 从类属到模板 ;11.1 从类属到模板;11.1 从类属到模板 ;11.2 函数模板与模板函数 11.2.1 概念;11.2.1 概念;11.2.1 概念;11.2.2 重载;templateclass T
T max(T x,T y) {
return(xy)?x:y;
}
void f(int i,char c)
{max(i,i) ; //正确
max(c,c); //正确
max(i,c); //错误
max(c,i); //错误
}
从上面的例子可以看出,当模板实参类型完全相同时才正确。虽然int和char之间的隐式类型转换在C++中很普遍,但是模板类型却不具有隐式类型转换的能力。;11.2.2 重载;templateclass T
T max(T x,T y) {
return(xy)?x:y;
}
int max(int,int); //声明max(int ,int)为重载的非模板函数
void f(int i,char c)
{max(i,i) ; //调用 max(int ,int)
max(c,c); //调用模板函数 max(char ,char)
max(i,c); //调用 max(int ,int)
max(c,i); //调用 max(int ,int)
}
由于普通函数参数具有隐式类型转换能力,因此调用语句max(i,c)和max(c,i),都可以正确编译。;⒉ 重新定义函数体
在定义重载函数模板的非模板函数时,给出这个重载函数的函数体。
例如:下面是一个重载函数模板max(T x,T y) 的非模板函数的定义:
char* max(char* s1,char* s2)
{
return (strcmp(s1,s2)0)?s1:s2;
};11.3 类模板与模板类 ;11.3.1 定义类模板 ;#include iostream
using namespace std;
templateclass T
class Max4
{
T a,b,c,d;
T Max(T a,T b){return(ab)?a:b;}
public:
Max4(T,T,T,T);
T Max(void);
};
//在类定义体外定义成员函数
templateclass T //定义成员函数必须再次声明模板
Max4T::Max4(T x1,T x2,T x3,T x4):a(x1),b(x2),c(x3),d(x4){}
templateclass T //定义成员函数必须再次声明模板
T Max4T::Max(void)
{return Max(Max(a,b),Max(c,d));};11.3.2 使用类模板;11.3.3类模板的派生 ;#include iostream
using namespace std;
templateclass T
class Point
{ T x,y;
public:
Point(T a,T b) { x=a;y=b;}
void Show() {coutx,yendl;}
};
templateclass T
class Line:public PointT
{ T x2,y2;
public:
Line(T a,T b,T c,T d):PointT(a,b) { x2=c;y2=d; }
void Show()
{ PointT::Show();coutx2,y2endl; }
};;void main()
{
Pointdouble a(4.5,2.9);
a.Show();
Lineint b(3,1,6,4);
b.Show();
Linedouble c(3.2,5.7,4.1,8.4);
c.Show();
};11.3.3 类模板的派生;#include iostream
using namespace std;
templateclass T
class Point
{ T x,y;
public:
Point(T a,T b) { x=a;y=b;}
void Show() {coutx,yendl;}
};
class Line:public Pointint //继承Point的int模板类
{ int x2,y2;
public:
Line(int a, int b, int c, int d):Point int (a,b)
{ x2=c;y2=d; }
void Show()
{ Pointint::Show();coutx2,y2endl;}
};;void ma
您可能关注的文档
最近下载
- 人教版四年级上册数学培优辅差计划.pdf VIP
- 比较思想政治教育(第二版) 001 比较思想政治教育(第二版) 第一章.pptx VIP
- 《声学基础》课件 .ppt VIP
- 2024-2025学年上海市陆行中学高二上学期9月月考数学试卷含详解.docx VIP
- 学校食堂从业人员培训资料全.pptx VIP
- 比较思想政治教育(第二版) 010 比较思想政治教育(第二版) 第十章.pptx VIP
- 2024版新教材九年级化学上册知识清单(教师版).pdf VIP
- 湖南省岳阳市临湘市第六中学2023-2024学年七年级上学期开学考试 数学试题.docx VIP
- 《计算机应用基础(第6版)Windows11+WPS Office》全套教学课件.pptx
- 比较思想政治教育(第二版) 013 比较思想政治教育(第二版) 第十三章.pptx VIP
文档评论(0)