首页 > 试题广场 >

下列关于模板的说法正确的是?

[单选题]
下列关于模板的说法正确的是
  • 模板的实参在任何时候都可以省略
  • 类模板与模板类所指的是同一概念
  • 类模板的参数必须是虚拟类型的
  • 类模板中的成员函数不全是模板函数
推荐
D
A:下面列举的几种情况不能省略模板实参:
1)从模板函数实参表获得的信息有矛盾之处。
2)需要获得特定类型的返回值,而不管参数的类型如何。
3)虚拟类型参数没有出现在模板函数的形参表中。
4)函数模板含有常规形参。
B:类模板与模板类的概念

⑴ 什么是类模板 一个类模板(也称为类属类或类生成类)允许用户为类定义一种模式,使得类中的某些数据成员、默写成员函数的参数、某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的)。

  如果一个类中数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表着一类类。

⑵ 模板类是类模板实例化后的一个产物。可以从类模板派生出新的类,既可以派生类模板,也可以派生非模板类。
类模板的重点是模板。表示的是一个模板,专门用于产生类的模子。 模板类的重点是类。表示的是由一个模板生成而来的类。
C:类模板有三种类型模板参数:类型模板参数、无类型模板参数和模板模板参数(以模板作为模板的参数)。并不局限于虚拟类型,非虚拟类型也可以作为类模板参数。
编辑于 2015-01-27 11:17:49 回复(0)

A 是错误的  ,实参不可以省略
B 不是同一概念

c是错误的,比如:
template<class  t, int i >  class _double
{

};
int就不是虚拟类型

D  类模板中的成员函数不全部都是模板函数,比如
template<class  t, int i >  class _double
{
int ss()
{
return 0;
}
};

发表于 2015-01-15 11:06:55 回复(1)
类模板中的静态成员函数不一定是模板函数,例如:
template<class T>
class test
{
    static int func(){
        return 0;
    }
}
请大神指教。
发表于 2017-04-27 13:31:32 回复(1)
类模板的重点是模板,表示一个模板;
模板类的重点是类,表示一个由模板生成的类。
发表于 2016-05-24 21:22:10 回复(1)
答案:D
A,错误,有时候可以省略,有时候不能省略。
B,类模板与模板类是不同的,类模板是一个模板,是类的抽象
模板类是一个类,是用类模板生成的类
C,错误,不必须
D,类模板是为了生成类的,所以其函数也是模板函数,用来在生成模板类的时候生成相应的函数
发表于 2015-01-26 19:55:44 回复(0)