内丘网站福州网站建设服务
news/
2025/9/23 7:58:21/
文章来源:
内丘网站,福州网站建设服务,广州最好的网站建设,一流高职院校建设网站#xfeff;#xfeff;我们可以建立template classes#xff0c;使它们能够神奇地操作任何类型的资料。下面这个例子是让CThree 类别储存三个成员变量#xff0c;成员函数Min 传回其中的最小值#xff0c;成员函数Max 则传回其中的最大值。我们把它设计为template class我们可以建立template classes使它们能够神奇地操作任何类型的资料。下面这个例子是让CThree 类别储存三个成员变量成员函数Min 传回其中的最小值成员函数Max 则传回其中的最大值。我们把它设计为template class以便这个类别能适用于各式各样的数据类型 template class Tclass CThree{public :CThree(T t1, T t2, T t3);T Min();T Max();private:T a, b, c;}; 语法还不至于太稀奇古怪把T 看成是大家熟悉的int 或float 也就是了。下面是成员函数的定义 template class TT CThreeT::Min(){T minab a b ? a : b;return minab c ? minab : c;}template class TT CThreeT::Max(){T maxab a b ? b : a;return maxab c ? c : maxab;}template class TCThreeT::CThree(T t1, T t2, T t3) : a(t1), b(t2), c(t3){return;} 这里就得多注意些了。每一个成员函数前都要加上template class T而且类别名称应该使用CThreeT。 //以下是template class 的使用方式#include iostream.hvoid main(){CThreeint obj1(2, 5, 4);cout obj1.Min() endl;cout obj1.Max() endl;CThreefloat obj2(8.52, -6.75, 4.54);cout obj2.Min() endl;cout obj2.Max() endl;CThreelong obj3(646600L, 437847L, 364873L);cout obj3.Min() endl;cout obj3.Max() endl;}执行结果如下 2 5 -6.75 8.52 364873 646600 对程序员而言C templates 可说是十分容易设计与使用但对于编译器和联结器而言却是一大挑战。编译器遇到一个template 时不能够立刻为它产生机器码它必须等待直到template 被指定某种类型。从程序员的观点来看这意味着template function 或template class 的完整定义将出现在template 被使用的每一个角落否则编译器就没有足够的信息可以帮助产生目的码。当多个源文件使用同一个template 时事情更趋复杂。 随着编译器的不同掌握这种复杂度的技术也不同。有一个常用的技术Borland 称之为Smart应该算是最容易的每一个使用Template 的程序代码的目的档中都存在有template码联结器负责复制和删除。 假设我们有一个程序包含两个源文件A.CPP 和B.CPP以及一个THREE.H其内定义了一个template 类别名为CThree。A.CPP 和B.CPP 都包含THREE.H。如果A.CPP以int 和double 使用这个template 类别编译器将在A.OBJ 中产生int 和double 两种版本的template 类别可执行码。如果B.CPP 以int 和float 使用这个template 类别编译器将在B.OBJ 中产生int 和float 两种版本的template 类别可执行码。即使虽然A.OBJ 中已经有一个int 版了编译器没有办法知道。然后在联结过程中所有重复的部份将被删除。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911838.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!