二级C++重点难点分析:模板
时间:2007-07-14 来源:大学生计算机等级考试 打印本文
1.1 函数模板1.1.1 考点1:函数模板的概念和声明
函数模板是一系列相关函数的模型或样板,这些相关函数的源代码形式相同,只是所针对的数据类型不同。对于函数模板,数据类型本身成了它的参数,因而是一种参数化类型的函数。类的成员函数也可以声明为函数模板。
声明一个函数模板的格式如下:
template <模板形参表声明>
返回类型 函数名(函数形参表)
{
…… //函数体
}
其中,<模板形参表声明>是由一个或多个“模板形参”组成的,如果是多个,则要用逗号隔开。“模板形参”具有下面3种形式:
typename 参数名
class 参数名
类型修饰 参数名
这里的参数名可以是任意合法的C++标识符。前两种形式是等价的,也就是说,在声明模板形参时,关键字typename和class可以互换。用typename或class声明的参数称为虚拟类型参数;而用“类型修饰”声明的参数则称为常规参数。这里的“类型修饰”是指具体的数据类型(如int、double、char等)。函数模板的<模板形参表声明>中,一定要包含虚拟类型参数,而常规参数则可以根据实际需要选择。
<模板形参表声明>中声明的虚拟类型参数可以用做:
函数的返回值类型
函数的形参的类型
函数体内变量的类型
例1.1.1 下列是模板声明的开始部分,其中正确的是( )。
A.template <T> B.template <class T1,T2>
C.template <class T1,class T2> D.template <class T1;class T2>
答案:C
例1.1.2 下面的函数模板定义中错误的是( )。
A.template<class Q> B.template<class Q>
Q F(Q x){return Q+x;} Q F(Q x){return x+x;}
C.template<class T> D.template<class T>
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

上一篇:二级C++重点难点分析:多态性
下一篇:二级C++重点难点分析:输入、输出流
相关阅读:
·二级C++重点难点分析:多态性 (2007-07-14)·二级C++重点难点分析:类与对象 (2007-07-14)
·二级C++重点难点分析:类的继承和派生 (2007-07-14)
·二级C++重点难点分析:数组、指针与引用 (2007-07-14)
·二级C++重点难点分析:函数 (2007-07-14)


