手机图片 苏州便民网 诺基亚手机
首页 | 英语四六级 | 日语学习 | 网络学院 | 考研 | 公务员考试 | 计算机 | 笑话 | 减肥 设大学生网为首页 加入收藏
C语言 VB VFP VC++ ACCESS JAVA
 
 
 
 
 

您的位置:首页 >> 计算机 >> 二级考试 >> VC++ >> 浏览信息

正文内容

二级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)

网站简介 | 广告服务 | 联系方式 | 意见建议 | 网站地图 | 版权声明 | 友情连接

大学生网 Stuun.com 版权所有