a)函数模板的友元函数必须是模板函数。
b)如果从一个带单个static数据成员的类模板产生几个模板类,则每个模板类共享类模板static数据成员的一个副本。
c)模板函数可以用同名的另一模板函数重载。
d)形式参数的名字可以只在模板函数的形式参数表中出现一次。同一个形式参数名只能用于一个模板函数。
e)关键字class指定函数模板类型参数,实际上表示“任何用户自定义类型”。
12.2填空:
a)模板使我们可以用一个代码段指定一组相关函数(称为——)或一组相关类(称——)。
b)所有的函数模板定义都是以关键字——开始的,该关键字之后是用——括起来的形式参数表。
c)从一个函数模板产生的相关函数都同名,因此编译器用——的解决方法调用相应函数。
d)类模板也称为——类型。
e)——运算符和模板类名一起将每个成员函数定义与类模板的范围相关联。
f)和非模板类的static数据成员一样,模板类的static数据成员也应在——范围
内初始化。
12.1
a)不正确。也可以用非模板函数。
b)不正确。每个模板类有自己的静态数据成员副本。
c)正确。
d)不正确。模板函数间的形式参数名不必惟一。
e)不正确。这里的关键字class也允许内部类型的参数类型。
12.2a)模板函数、模板类。
b)template、尖括号(<>)。
c)重载。
d)参数化。
e)二元作用域。
f)文件。
12.3 根据图5.15的排序程序编写函数摸板bubbleSort。编写一个驱动程序,输入、排序和输出int数组与float数组。
12. 4 重载图12.2的函数模板printArray,使其取另外两个整数参数int lowSubscript和int highSubscript。调用这个函数只打印数组中的指定部分。验证lowSubscript和highSubscript。如果其中一个值超界或highSubscript小于等于lowSubscript,则重载的printArray函数返回0,否则printArray返回打印的元素个数。然后修改main,对数组a、b、c使用两个版本的printArray。一定要测试两个版本的printArray的各种可能情况。
12.5 用非模板版本重载图12.2的函数模板prinlArray,使其以整齐的表格式分栏格式打印字符串数组。
12.6 编写判定函数isEqualTo的简单函数模扳,用相等运算符比较其两个参数,如果相等则返回1,如果不相等则返回0。使用这个函数模扳,使得程序中对各种内部类型调用isEqualTo。现在编写程序的另一种形式,对用户自定义类的类型调用isEqualTo,但不重载相等运算符。运行这个程序时会发生什么情况 重载相等运算符(用运算符函数
operator==),运行这个程序时会发生什么情况
12.7 用无类型参数numberOfElements和类型参数elementType生成第8章开发的Array类模板。这个模板按编译时指定个数的指定元素类型实例化Array对象。
12.8 编写一个使用类模板Array的程序,模板可以实例化任何元素类型的Array对象。用float元素的Array(class Array<float>)重定义模板。驱动程序演示通过模板实例化int类型的Array,并使用class Array<float>中提供的定义实例化float类型的Array。
12. 9 试区分模板函数与函数模板。
12. 10类模板与模板类哪个像是能够绘制形状的模扳 为什么
12.11函数模板与重载有什么关系
11. 12为什么选择函数模板而不选择宏
12.13使用函数模板与类模板可能造成哪些性能问题
12.14编译器通过匹配过程确定函数调用时调用哪个模板函数。什么情况下进行匹配会造成编译错误
12.15为什么类模板也称为参数化类型
12.16解释C++程序中使用下列语句的原因。
Array<Employee>workerList(100);
12.17分析练习12.16的答案,解释C++程序中使用下列语句的原因。
Array<Employee>workerList;
12.18解释C++程序中使用下列语句的原因。
template< class T > Array< T >::Array( int s )
12.19为什么数组、堆栈之类的容器类模板通常用无类型参数
12.20说明如何提供特定类型的类重定义该类型的类模板。
12.21说明类模板与继承的关系。
12.22假设类模板的首部如下:
template<class T1>class C1
说明类模板首部中用下列友元声明时的友元关系。以f开头的标识符是函数以C开头的标识符是类,以T开头的标识符是任何类型(即内部类型或类类型)。
a)friend void f1(); b)friend void f2(C1< T1 > &); c)friend void C2::f4(); d)friend void C3<T1>::f5(C1<T1>&); e)friend class C5; f)friend class C6<T1>;12.23假设类模板Employee有static数据成员count。假设从类模板实例化三个模板类。那么有多少个static数据成员 各有什么限制(如果有)