《面向对象程序设计Ⅱ》期末复习资料之五:模版一、选择题
1.关于函数模板,描述错误的是()。(A)
A.函数模板必须由程序员实例化为可执行的函数模板
B.函数模板的实例化由编译器实现
C.一个类定义中,只要有一个函数模板,则这个类是类模板
D.类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化
2.下列的模板说明中,正确的是()。(C)
A.template < typename T1, T2 >
B.template < class T1, T2 >
C.template < class T1, class T2 >
D.template ( typename T1, typename 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.关于类模板,描述错误的是()。(D)
A.一个普通基类不能派生类模板
B.类模板从普通类派生,也可以从类模板派生
C.根据建立对象时的实际数据类型,编译器把类模板实例化为模板类
D.函数的类模板参数须通过构造函数实例化
5.建立类模板对象的实例化过程为()。(C)
A.基类--派生类B.构造函数--对象
C.模板类--对象D.模板类--模板函数
6.在C++中,容器是一种()。(D)----第10章内容
A.标准类B.标准对象
C.标准函数D.标准类模板
二、阅读下列程序,写出执行结果
1.#include
template
void fun( T &x, T &y )
{
T temp;
temp = x; x = y; y = temp;
}
void 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
template
class Base
{
public:
Base( T i , T j ) { x = i; y = j; }
T sum() { return x + y; }
private:
T x , y;
} ;
void main()
{
Base
cout << obj2.sum() << endl;
Base
cout << obj1.sum() << endl;
}
参考答案
8.8
8
三、综合编程题
@@@1.使用函数模板实现对不同类型数组求平均值的功能,并在main()函数中分别求一个整型数组和一个单精度浮点型数组的平均值。
参考答案:
#include
template
float average( T *array,int size )
{
T sum = 0;
for( int i=0; i sum += array[i]; return sum / size; } void main() { int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; float b[] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10 }; cout << "Average of array a :" << average( a,10 ) << endl; cout << "Average of array b :" << average( b,10 ) << endl; } @@@2. 建立结点包括一个任意类型数据域和一个指针域的单向链表类模板。在main()函数中使用该类模板建立数据域为整型的单向链表,并把链表中的数据显示出来。 参考答案: #include template class List { public: List( T x ) { data = x; } void append( List *node ) { node->next = this; next = 0; } List *getnext() { return next; } T getdata() {return data; } private: T data; List *next; }; void main() { int i, idata, n, fdata; cout << "输入结点的个数:"; cin >> n; cout << "输入结点的数据域:"; cin >> fdata; List List last = &headnode; for( i=1; i { cin >> idata; p = new List p->append( last ); last = p; } cout << "链表已经建立!" << endl; cout << "链表中的数据为:" << endl; p = &headnode; while( p ) { cout << p->getdata() << endl; p = p->getnext(); } }