365文库
登录
注册
2

函数模板和类模板

192阅读 | 6收藏 | 11页 | 打印 | 举报 | 认领 | 下载提示 | 分享:
2
函数模板和类模板第1页
函数模板和类模板第2页
函数模板和类模板第3页
函数模板和类模板第4页
函数模板和类模板第5页
函数模板和类模板第6页
函数模板和类模板第7页
函数模板和类模板第8页
函数模板和类模板第9页
函数模板和类模板第10页
函数模板和类模板第11页
福利来袭,限时免费在线编辑
转Pdf
right
1/11
right
下载我编辑的
下载原始文档
收藏 收藏
搜索
下载二维码
App功能展示
海量免费资源 海量免费资源
文档在线修改 文档在线修改
图片转文字 图片转文字
限时免广告 限时免广告
多端同步存储 多端同步存储
格式轻松转换 格式轻松转换
用户头像
余生一生 上传于:2024-10-11
函数模板和类模板函数模板若函数只是参数类型不同功能完全一样则可以通过一段通用的适用于多种不同数据类型的代码来完成这一工作不禁提高代码的可重用性还提高了软件的开发效率使用函数模板就是为了这一目的函数模板的定义形式Template类型名函数名参数表函数体定义所有函数模板的定义都是用关键字tenplate开始的该关键字之后是使用尖括号括起来的模板参数表模板参数表由用逗号分隔的模板参数构成class或typename标识符指明可以接受一个类型参数这些类型参数代表的是类型可以是内部类型或自定义类型类型说明符标识符指明可以接收一个由类型说明符所规定的常量作为参数Templateclass标识符指明可以接收一个类模板名作为参数函数模板中声明了类型参数T表示一种抽象的类型当主函数调用该函数时编译器会一函数模板为样本生成一个函数这一过程称为函数模板的实例化新生成的汗水的防护称为函数模板的一个实例模板函数与函数重载模板函数与重载是密切相关的从函数模板产生的相关函数都是同名的编译器用重载的方式调用相应的函数另外函数模板本身也课题用多种方式重载注意虽然函数模板的使用形式与函数类似但二者有本质的区别这主要表现在以下方面函数模板本身在编译时不会生成任何目标代码只有由模板生成的实例会生成目标代码被多个源文件引用的函数模板应当连同喊大叔体一同放入头文件中而不能像普通函数那样只将声明放入头文件函数指针也只能指向模板实例而不能指向模板本身函数模板应用示例includeusingnamespacestdtemplatevoidoutputAconstTarrayintcountforinti0icoutcoutintmainconstintACOUNT8BCOUNT8CCOUNT20intaACOUNT12345678doublebBCOUNT1122334455667788charcCCOUNTwelcometoseeyoucoutoutputAaACOUNTcoutoutputAbBCOUNTcoutoutputAcCCOUNTreturn0运行结果aarraycontains12345678barraycontains1122334455667788carraycontainswelcometoseeyou类模板使用类模板使用户可以为类定义一种模式使得类中的某些数据成员某些成员函数的参数返回值或局部变量能取任意类型包括系统预定义的和用户自定义的类模板声明的语法形式是templateclass类名类成员声明其中类成员声明的方法与普通类的定义几乎相同只是在他的各个成员数据成员和函数成员中通常要用到模板类型参数T如果需要在类模板以外定义其他成员函数则要采取以下形式templaete类型名类名函数名参数表一个类模板声明自身并不是一个类它说明了类的一个家族只有当被其他代码引用模板才根据引用的需要生成具体的类使用一个模板类来建立对象时应按如下形式声明模板名对象名1对象名n类模板应用举例includeincludeusingnamespacestdstructstudent结构体studentintid学号floatgpa平均分template类模板实现对任意类型进行存取classstoreprivateTitemitem用于存放任意类型的数据boolhavevaluehavevalue标记item是否已被存入内容publicstore默认形式无形参的构造函数Tampgetelem提取数据函数voidputelemconstTampx存入数据函数template默认构造函数的实现storestorehavevaluefalsetemplate提取数据函数的实现Tampstoregetelemifhavevalue如果试图提取未初始化的的数据则终止程序coutexit1使程序完全退出返回到操作系统参数可用来表示程序终止的原因可以被操作系统接收returnitem返回item中存放的数据template存入数据函数的实现voidstoreputelemconstTampxhavevaluetrue将havevalue置为true表示item已存入数据itemx将x的值存入itemintmainstores1s2定义两个store类对象item为int类型s1putelem3向对象s1中存入数据初始化对象s1s2putelem7向对象s2中存入数据初始化对象s2cout输出对象s1和s2的数据成员studentg100023定义student类型结构体变量的同时赋予初值stores3定义store类对象s3其中数据成员item为student类型s3putelemg向对象s3中存入数据初始化对象s3cout输出对象s3的数据成员stored定义store类对象d其中数据成员item为double类型dputelem8coutcout由于d未经初始化在执行函数dgetelem过程中导致程序终止return0运行结果37thestudentidis1000retrievingobjectdnoitempresent
tj