实验7 模板
- 格式:doc
- 大小:44.50 KB
- 文档页数:5
实验8 模板
1、 实验目的和要求:
理解函数模板、类模板
应用模板函数、模板类
2、 实验内容
一、基本概念题
1、 下列对模板的声明,正确的是_________。
A)template
B)template
C)template
D)template
2、 一个_________允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的
返回值能取任意类型。
A)函数模板
B)模板甲数
C)类模板
D)模板类
3、 类模板的模板参数_________。
A)只可作为数据成员的类型
B)只可作为成员函数的返回类型
C)只可作为成员函数的参数类型
D)以上三者皆可
4、 下列程序段中有错的是_________。
A)template
B)Type
C)func(Type a,b)
D){return (a>b)?(a):(b);}
5、 模板是实现类属机制的一种工具,其功能非常强大,它既允许用户构造类属函数,即___①
___:也允许用户构造类属类,即___②___。
A)模板函数
B)函数模板
C)模板类
D)类模板
6、 类模板的使用实际上是将类模板实例化成一个具体的_________。
A)类
B)对象
C)函数
D)模板类
7、 关于函数模板,描述错误的是( )
A) 函数模板必须由程序员实例化为可执行的函数模板
B) 函数模板的实例化由编译器实现
C) 一个类定义中,只要有一个函数模板,则这个类是类模板
D) 类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化
8、 下列的模板说明中,正确的是( )(两个答案)
A) template
B) template
C) template
D) template
9、 假设有函数模板定义如下:
Template
Max(T a, T b, T &c)
{ c=a+b; }
下列选项正确的是( )(两个答案)
A) float x,y; float z; Max(x,y,z);
B) int x,y,z; Max(x,y,z);
C) int x,y; float z; Max(x,y,z);
D) float x; int y, z; Max(x,y,z);
10、关于类模板,描述错误的是( )
A) 一个普通基类不能派生类模板
B) 类模板从普通类派生,也可以从类模板派生
C) 根据建立对象时的实际数据类型,编译器把类模板实例化为模板类
D) 函数的类模板参数须通过构造函数实例化
11、建立类模板对象的实例化过程为( )
A) 基类派生类 B) 构造函数对象
C) 模板类对象 D) 模板类模板函数
12、需要一种逻辑功能能一样的函数,而编制这些函数的程序文本完全一样,区别只是数据
类型不同。对于这种函数,下面不能用来实现这一功能的选项是()
A)宏函数
B)为各种类型都重载这一函数
C)模板
D)友元函数
二、程序设计题
1)设计函数模板求出数组的最小值,其中数组为具有n个元素,类型为T。对以下数组进
行测试
int a[ 10 ] = { 1,3,5,7,9}
double d[3] = {-1.1, -2.2, -3.3}
char* name = {“linda”,”lelele”,”linlin”}
2)用类模板方式设计一个栈类stack
个私有数据成员:T* s(存放栈元素)和top(栈顶元素下标),至少包含3个公有成员函数:
push(元素入栈)、pop(元素出栈)和stackempty(判断栈是否为空),并建立一个整数栈
和学生栈测试模板。
3)编写并使用安全数组类模板BoundArray,能够存储各种类型的数据。
实现对数组进行排序sort
重载=、[]、<、==
产生并测试以下模板类:
BoundArray
4)(选作) 编写并使用链表模板类List
5) 阅读程序,了解STL中vector容器的使用方法
//测试STL中的vector容器
#include
#include
using namespace std;
//测试vector容器的功能
int main( )
{
vector
// 插入与删除元素
vec1.push_back(2);
vec1.push_back(4);
vec1.push_back(3);
vec1.push_back(8);
cout <<"vec1:"<< endl;
for(int j=0; j
cout << endl;
vec1.pop_back( ); cout << "vec.front( )=" << vec1.front( ) << endl; vector //显示序列的状态信息 //vector序列容器的运算 vector //从前向后显示vec3中的数据 //测试添加和插入成员函数 //测试移出和删除 return 0;
// 引用元素
vec1[0] = 20;
cout<<"vec1[2] ="<< vec1[2] <
cout << "vec.back( )=" << vec1.back( ) << endl;
vec2.push_back(7);
vec2.pop_back( );
vec2.assign(8,1);
cout <<" \nvec2:"<< endl;
cout << "vec.capacity( ): " << vec2.capacity( ) << endl;
cout << "vec.max_size( ): " << vec2.max_size( ) << endl;
cout << "vec.size( ): " << vec2.size( ) << endl;
cout << "vec.empty( ): " << vec2.empty( ) << endl;
cout << "vec2==vec1: " << (vec1==vec2) << endl;
vector
// vector
cout <
cout << *i << " ";
cout << endl;
vec3.insert(vec3.begin( )+1,5);
vec3.insert(vec3.begin( )+1,vec1.begin( ),vec1.end( ));
vec3.pop_back( );
vec3.erase(vec3.begin( )+1,vec3.end( )-2);
cout << "vec1.pop_back( ) and vec1.erase( ):" << endl;
for (i =vec3.begin( ); i !=vec3.end( ); ++i)
cout << *i << " ";
cout << endl;
}