二级C 重点难点分析:模板
文章作者 100test 发表时间 2007:07:17 13:11:59
来源 100Test.Com百考试题网
1.1 函数模板
1.1.1 考点1:函数模板的概念和声明
函数模板是一系列相关函数的模型或样板,这些相关函数的源代码形式相同,只是所针对的数据类型不同。对于函数模板,数据类型本身成了它的参数,因而是一种参数化类型的函数。类的成员函数也可以声明为函数模板。
声明一个函数模板的格式如下:
template <模板形参表声明>
返回类型 函数名(函数形参表)
{
…… //函数体
}
其中,<模板形参表声明>是由一个或多个“模板形参”组成的,如果是多个,则要用逗号隔开。“模板形参”具有下面3种形式:
. typename 参数名
. class 参数名
. 类型修饰 参数名
这里的参数名可以是任意合法的C 标识符。前两种形式是等价的,也就是说,在声明模板形参时,关键字typename和class可以互换。用typename或class声明的参数称为虚拟类型参数;而用“类型修饰”声明的参数则称为常规参数。这里的“类型修饰”是指具体的数据类型(如int、double、char等)。函数模板的<模板形参表声明>中,一定要包含虚拟类型参数,而常规参数则可以根据实际需要选择。
<模板形参表声明>中声明的虚拟类型参数可以用做:
. 函数的返回值类型
. 函数的形参的类型
. 函数体内变量的类型
例1.1.1 下列是模板声明的开始部分,其中正确的是( )。
A.template B.template
C.template D.template
答案:C
例1.1.2 下面的函数模板定义中错误的是( )。
A.template B.template
Q F(Q x){return Q x.} Q F(Q x){return x x.}
C.template D.template
T F(T x){return x*x.} bool F(T x){return x>1.}
解析:各个选项中声明的Q和T都是虚拟类型参数。函数模板形参表中声明的虚拟类型参数可以用做:
. 函数的返回值类型
. 函数的形参的类型
. 函数体内变量的类型
选项B、C和D符合以上三种用法。而选项A让虚拟类型参数Q直接参与运算是错误的。虚拟类型是具体类型(如int型,double型等)的抽象。我们知道,int本身并不能直接参与数学运算,但是由它定义的int型变量或int型参数可以直接参与运算。虚拟类型Q和T本身也不能直接参与运算,但是由它们定义的“T类型”或“Q类型”的参数x可以参与运算。所以,选项A中“Q x”的表达是错误的。
答案:A
src="/ncre2/js/wxgg.js">