您现在的位置:学赛首页 > 计算机等级考试 > 复习资料 > 正文
二级C++重点难点分析:模板[2]
http://www.educity.cn 作者:希赛IT教育研发中心 来源:希赛网 2007年7月11日 发表评论 进入社区
    <模板形参表声明>中声明的虚拟类型参数可以用做:

     函数的返回值类型
     函数的形参的类型
     函数体内变量的类型

       例14.1.1  下列是模板声明的开始部分,其中正确的是(   )。[2004年9月 选择第30题]
    A.template <T>            B.template <class T1,T2>
    C.template <class T1,class T2>     D.template <class T1;class T2>
    答案:C

       例14.1.2  下面的函数模板定义中错误的是(   )。[2005年4月 选择第24题]
    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

    14.1.2  考点2:模板函数

    函数模板中声明的函数称为模板函数。
    调用一个模板函数的格式如下:
    函数名 <模板实参表> (函数实参表);
    或
    函数名(函数实参表);
    第二种格式中省略了所有的模板实参,使用这种格式是需要一定条件的(详见考点4)。
    类模板的成员函数都是模板函数。

       例14.1.3  以下函数模板max的功能是:返回数组a中最大元素的值。请将横线处缺失部分补充完整。[2005年4月 填空第14题]
    template <typename T>
    T max (T a[], int n)
    {
     T m = a[0];
     for (int i = 1; i < n; i++)
        if (a[i]>m)          ;
        return m;
    }
    解析:本题考查模板函数的定义。在编写函数体时,模板函数与普通函数是一样的。根据题意,返回的m值应该是a中最大元素的值,所以当a[i]>m时,应该将较大的a[i]值赋给m。在遍历数组a[]后,最终m就保存了数组a[]中最大元素的值。
    答案:m=a[i]
  本章节内容来自希赛全国计算机等级考试用书《计算机等级考试考点分析、题解与模拟——二级C++语言》。(购书请见 :http://shop.csai.cn/itbook/itbookinfo.asp?lbbh=10032460

[1]  [2]  [3]  [4]