第9章习题答案讲课教案
- 格式:docx
- 大小:20.47 KB
- 文档页数:11
第9章习题答案
第九章模板
1 选择题
(1).关于函数模板,描述错误的是( A )。
(A) 函数模板必须由程序员实例化为可执行的函数模板
(B) 函数模板的实例化由编译器实现
(C) 一个类定义中,只要有一个函数模板,则这个类是类模板
(D) 类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化
(2).下列的模板说明中,正确的是( c )。
(A) template < typename T1, T2 >
(B) template < class T1, T2 >
(C) template < typename T1, typename T2 >
(D) template ( typedef T1, typedef T2 )
(3).假设有函数模板定义如下:
template
Max( T a, T b ,T &c)
{ c = a + b ; }
下列选项正确的是( B )。
(A) int x, y; char z ; (B) double x, y, z ;
Max( x, y, z ) ; Max( x, y, z ) ;
(C) int x, y; float z ; (D) float x; double y, z ; Max( x, y, z ); Max( x, y, z ) ;
(4).关于类模板,描述错误的是( A )。
(A) 一个普通基类不能派生类模板
(B) 类模板可以从普通类派生,也可以从类模板派生
(C) 根据建立对象时的实际数据类型,编译器把类模板实例化为模板类
(D) 函数的类模板参数需生成模板类并通过构造函数实例化
(5).类模板的使用实际上是将类模板实例化成一个(C)。
A.函数 B.对象 C.类 D.抽象类
(6).类模板的模板参数(D)。
A.只能作为数据成员的类型 B.只可作为成员函数的返回类型
C.只可作为成员函数的参数类型 D.以上三种均可
(7).类模板的实例化(A)。
A.在编译时进行 B.属于动态联编C.在运行时进行 D.在连接时进行
(8).以下类模板定义正确的为(A)。
A.template
C.template
2 阅读下列程序,写出执行结果
(1).
#include
using namespace std;
template
void fun( T &x, T &y )
{ T temp;
temp = x; x = y; y = temp;
}
int main()
{ int i , j;
i = 10; j = 20;
fun( i, j );
cout << "i = " << i << '\t' << "j = " << j << endl;
double a , b;
a = 1.1;
b = 2.2;
fun( a, b );
cout << "a = " << a << '\t' << "b = " << b << endl;
}
【解答】
i=20 j=10
a=2.2 b=1.1
(2).
#include
using namespace std;
template
class Base
{ public:
Base( T i , T j ) { x = i; y = j; }
T sum() { return x + y; }
private:
T x , y;
} ;
int main()
{ Base
cout << obj2.sum() << endl;
Base
cout << obj1.sum() << endl;
}
【解答】
8.8
8
3.抽象类和类模板都是提供抽象的机制,请分析它们的区别和应用场合。【解答】
抽象类至少包含一个纯虚函数,纯虚函数抽象了类体系中一些类似操作的公共界面,它不依赖于数据,也没有操作定义。派生类必须定义实现版本。抽象类用于程序开发时对功能的统一策划,利用程序运行的多态性自动匹配实行不同版本的函数。
类模板抽象了数据类型,称为类属参数。成员函数描述了类型不同,逻辑操作相同的功能集。编译器用建立对象的数据类型参数实例化为模板类,生成可运行的实体。类模板用于抽象数据对象类型不同,逻辑操作完全相同类定义。这种数据类型的推导必须在语言功能的范畴之内的。
4.类模板能够声明什么形式的友员?当类模板的友员是函数模板时,它们可以定义不同形式的类属参数吗?请你写个验证程序试一试。
【解答】
类模板可以声明的友员形式有:普通函数、函数模板、普通类成员函数、类模板成员函数以及普通类、类模板。
当类模板的友员是函数模板时,它们可以定义不同形式的类属参数。
程序略。
5.类模板的静态数据成员可以是抽象类型吗?它们的存储空间是什么时候建立的?请你用验证程序试一试。
【解答】
类模板的静态数据成员可以是抽象类型。它们的存储空间在生成具体模板类的时候建立,即每生成一个模板类同时建立静态储存空间并做一次文件范围的初始化。
程序略。
6.设计一个函数模板,其中包括数据成员T a[n]以及对其进行排序的成员函数 sort( ),模板参数T可实例化成字符串。
【解答】
#include
#include
using namespace std;
template
int i,j;
T t;
for(i=0;i for(j=0;j if (a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } template int i; for(i=0;i