第七章 习题

一、名词解析

函数模板:一个带类属参数的函数。

类模板:一个带类属参数的类。

模板函数  :通过参数实例化可以再构造出具体的函数。

模板类:通过参数实例化可以再构造出具体的类。

二、填空题

(1)C++支持两种模板,一种是     函数模板      ,另一种是    类模板               。

(2)关键字   template      是定义模板的关键字。

(3)<模板参数>中包含一个或多个用逗号分开的模板参数项,每一项由保留字      class      或者      typename    开始。

(4)重载函数模板便于定义     类属参数      或者函数参数的类型、个数不相同所进行的      类似     操作。

(5)函数模板实例化时,      没有    普通传值参数的类型转换机制。

(6)STL提供的容器是常用数据结构的     类模板    。

(7)STL容器类库包含7种基本容器。他们可以分成两组:       顺序容器    和   关联容器   

(8)STL迭代器主要包括5种基本类别: 输入迭代器  、 输出迭代器   、前向迭代器    、 双向迭代器    、 随机访问迭代器  。

三、选择题(至少选一个,可以多选)

(1)关于函数模板,描述错误的是(A)

A、函数模板必须由程序员实例化为可执行的模板函数

B、模板函数的实例化有编辑器实现

C、一个类定义中,只要有一个函数模板,则这个类是类模板

D、类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化

(2)下列模板说明中,正确的是(AC)

A、template<typename T1,typename T2>

B、template<class T1,T2>

C、template(class T1,class T2)

D、template(typename T1 ,T2)

(3)假设有函数模板定义如下:

template <typename T>

Max(T a,T b, T&c)

{c=a+b;}

下列选项正确的是(AB)

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; double y ,z;

Max(x,y,z);

(4)建立类模板对象的实例化过程为(C)

A、基类 ——>派生类                      B、构造函数——>对象         C、模板类——>对象          D、模板类——>模板函数

(5)下面(ABD)是标准模板库中的主要组件。

A、容器           B、迭代器                 C、文件                D、算法

四、判断题

(1)一个模板函数能够被相同函数名的另外模板函数重载。                                                  (对 )

(2)作为模板类型参数的关键字class,特别含义是“任何用户定义类的类型”。                  ( 错)

(3)在类模板<模板参数表>中,必须至少有一个类参数。                                                    ( 对)

(4)在类模板<模板参数表>中,可以使用函数类型参数,该参数与普通函数参数的用法和功效完全相同。           ( 错)

(5)迭代器就是我们平常所用的指针。                                                                                   ( 错)

五、程序设计题

(1)用函数模板实现求整数、实现平方根的程序。

编写程序如下:

//xt7_1.cpp
#include <iostream>
#include <cmath>
using  namespace std;
template <typename T>
T kaifang(T a)
{
	T c;
	c=sqrt(a);
	return c;
}
int main( )
{
	int x=kaifang(4);
    cout<<"整数4的平方根为:"<<x<<endl;
    double y=kaifang(1.96);	   
    cout<<"实数1.96的平方根为:" <<y<<endl;
    return 0;
}

(2)设计一个类模板,然后将该类模板实例化为整数型和字符型类。利用类模板的成员函数为其数据成员赋值,并显示所赋给的值。

编写程序如下:

//xt7_2.cpp
#include <iostream>
using  namespace std;
template <typename numtype>
class Classtemple
{
	public:
		void setdata(numtype x, numtype y)
		{
			a=x;b=y;
		}
        void dispdata()
		{
			cout<<"first number is "<<a<<endl;
            cout<<"second number is "<<b<<endl;
        }
    private:
		numtype a,b;
};
int main( )
{
	Classtemple<int> intobj;
	intobj.setdata(23,24);
	cout<<"整数类的两个数据成员为:"<<endl;
    intobj.dispdata();
    Classtemple<char> charobj;
	charobj.setdata('3','4');
    cout<<"字符类的两个数据成员为:"<<endl;
    charobj.dispdata();
    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++程序设计(谭浩强)例题和习题答案 习 题 说 明 在这部分中提供了由谭浩强编著的《C++程序设计》(清华大学出版社出版)一书中各章的全部习题的参考解答。 为了帮助读者更好地理解程序,我们在有的程序中加了必要的注释。对有的题目,我们提供了几种不同的解法和程序,供读者比较分析。 习题解答程序按章设立文件夹(子目录),如文件夹xt1中包含的是第1章全部习题的解答程序。程序的文件名以xt开头,与例题号一一对应,如xt7-3.cpp是第7章第3题的解答程序。对于给出了两种或多种解答程序的,在文件名中加了顺序号,如xt6-11-1.cpp是第6章第11题的第1种解答程序,xt6-11-2.cpp是第6章第11题的第2种解答程序。 我们提供的只是参考答案,并不一定是惟一正确的答案,甚至不一定是最好的答案,读者完全可以举一反三,编写出更好的程序。 这些程序只供读者参考,未经作者同意,请勿自行印刷或出版。 例 题 说 明 在这部分中提供了由谭浩强编著的《C++程序设计》(清华大学出版社出版)一书中各章的例题程序,以方便教师进行教学,也便于读者上机运行这些程序以及在此基础上修改和调试程序。 程序按章设立文件夹(子目录),如文件夹c12中包含的是第12章全部例题的程序。程序的文件名以c开头,与例题号一一对应,如c5-7.cpp是第5章例5.7的程序。对于教材中同一例题中包含两个或多个程序的,在文件名中加了顺序号,如c10-4-1.cpp是例10.4的第1个程序,c10-4-2.cpp是例10.4的第2个程序。 教材中所有的程序都是符合C++标准规定的,在GCC中能通过,但有的程序在Visual C++ 6.0中通不过。如果在Visual C++ 6.0环境下运行程序,需要对程序作一些修改。例如,如果程序c10-4-1.cpp在Visual C++ 6.0环境下编译,第1行应改为“include <iostream.h>”,并将第2行“using namespace std;”取消即可顺利通过编译,其他类似。我们在教材的例题程序中还提供了能在Visual C++ 6.0环境下运行的程序,在文件名中加了"(VC)"字样,如c10-4-2(VC) 表示它是对程序c10-4-2修改后能用于Visual C++ 6.0环境的程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值