C++面向对象程序设计教程课后习题答案.ppt_第1页
C++面向对象程序设计教程课后习题答案.ppt_第2页
C++面向对象程序设计教程课后习题答案.ppt_第3页
C++面向对象程序设计教程课后习题答案.ppt_第4页
C++面向对象程序设计教程课后习题答案.ppt_第5页
已阅读5页,还剩171页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C+面向对象程序设计教程,第1章C+程序设计基础习题解答,.,一、选择题,1下列语句中,错误的是。A)constintbuffer=256;B)constinttemp;C)constdouble*point;D)double*constpt=newdouble(5.5);解析:修饰符const声明的常量只能被读取,该常量必须在声明时进行初始化,并且它的值在程序中不能改变。选项B)没有初始化,错误。选项C)定义了一个指向constdouble的指针,其意义为指针point指向的变量不能通过指针point来改变,D)中表示指针pt是常量指针,已在声明时进行了初始化。答案:B,.,2关于函数重载,下列叙述中错误的是。A)重载函数的函数名必须相同B)重载函数必须在参数个数或类型上有所不同C)重载函数的返回值类型必须相同D)重载函数的函数体可以有所不同解析:函数重载是用同一个函数名字在不同的参数类型或参数个数上做类似的操作方作,它们的实现方法可以不同。所以说,重载函数的函数名必须相同,函数体可以有所不同。函数重载必须在参数类型或参数个数上不一样,不能依靠返回值不一样来区分重载函数。答案:C,.,3有以下程序:voidFun(inti,intj)couti+jendl;/输出i+jvoidFun(inti)couti+endl;/输出i+intmain()/主函数main()inta=1;/定义变量iFun(a);/调用Fun()return0;/返回值0,返回操作系统该程序执行后输出的结果是。A)1B)2C)3D)4解析:由于主函数中调用的Fun()函数只有一个参数,故执行的是voidFun(inti)的版本,执行“couti+endl;”时,由于是后缀“+”,所以先输出i的值1,再使i加1。答案:A,.,二、编程题,1编写一个C+程序,要求输出“欢迎学习C+语言!”。参考程序:#include/编译预处理命令usingnamespacestd;/使用命名空间stdintmain()/主函数main()cout欢迎学习C+语言!endl;/用C+的方法输出一行system(PAUSE);/调用库函数system(),输出提示信息return0;/返回值,返回操作系统,.,*2编一个程序,用一个函数实现求n个整型数据的最小值。函数原型如下:intMin(inta,intn)参考程序:#include/编译预处理命令usingnamespacestd;/使用命名空间stdintMin(inta,intn)/求n个整型数据的最小值intm=a0,i;/临时变量for(i=1;in;i+)/依次比较求最小值if(aim)/如果ai更小m=ai;/ai为当前最小值returnm;/返回最小值intmain()/主函数main()inta=1,2,3,4,5,6,7,8,9,-10,n=10;cout最小值为Min(a,n)y?x:y;/x,y的最大值m=mz?m:z;/m,z的最大值returnm;/返回x,y,z的最大值intmain()/主函数main()cout2,3的最大值为Max(2,3)endl;cout1,6,8的最大值为Max(1,6,8)endl;system(PAUSE);/调用库函数system(),输出提示信息return0;/返回值,返回操作系统,.,4用变量的引用作函数形参,实现交换两个整型变量,要求编写测试程序。参考程序:#include/编译预处理命令usingnamespacestd;/使用命名空间stdvoidSwap(int/返回值,返回操作系统,.,*5编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度实型、双精度实型,用重载函数实现。参考程序:#include/编译预处理命令usingnamespacestd;/使用命名空间stdvoidSort(inta,intn)/对a0.an-1进行排序inttem,i,j;/定义变量for(i=0;iaj)/ai比aj更大tem=ai;ai=aj;aj=tem;,.,*5编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度实型、双精度实型,用重载函数实现。参考程序:voidSort(floata,intn)/对a0.an-1进行排序floattem;/临时变量inti,j;/定义变量for(i=0;iaj)/ai比aj更大tem=ai;ai=aj;aj=tem;,.,*5编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度实型、双精度实型,用重载函数实现。参考程序:voidSort(doublea,intn)/对a0.an-1进行排序doubletem;/临时变量inti,j;/定义变量for(i=0;iaj)/ai比aj更大tem=ai;ai=aj;aj=tem;,.,*5编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度实型、双精度实型,用重载函数实现。参考程序:intmain()/主函数main()inta=1,3,2,5,6,9,0,6;/定义afloatb=1.6,3.3,2.8,5.6,6.8,9.6,0.6,6.8;/定义bdoublec=1.2,3.1,2.6,5.8,6.8,9.8,0.8,6.2;/定义cinti,n=8;/定义变量Sort(a,n);/对a排序couta:;/输出提示for(i=0;in;i+)coutai;/输出aicoutendl;/换行,.,*5编一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度实型、双精度实型,用重载函数实现。参考程序:Sort(b,n);/对b排序coutb:;/输出提示for(i=0;in;i+)coutbi;/输出bicoutendl;/换行Sort(c,n);/对c排序coutc:;/输出提示for(i=0;in;i+)coutci;/输出cicoutendl;/换行system(PAUSE);/调用库函数system(),输出系统提示信息return0;/返回值,返回操作系统,.,C+面向对象程序设计教程,第2章类和对象习题解答,.,一、选择题,1下列选项中,不属于面向对象程序设计特征的是。A)继承性B)多态性C)类比性D)封装性解析:封装性、继承性和多态性是面向对象思想的3个主要特征。封装性指将数据和算法捆绑成一个整体,这个整体就是对象,描述对象的数据被封装在其内部。继承性是指一种事物保留了另一种事物的全部特征,并且具有自身的独有特征。多态性主要指当多个事物继承自一种事物时,同一操作在它们之间表现出不同的行为。答案:C,.,2在面向对象方法中,实现信息隐蔽是依靠。A)对象的继承B)对象的多态C)对象的封装D)对象的分类解析:在面向对象方法中,封装性是指将数据和算法捆绑成一个整体,这个整体就是对象,描述对象的数据被封装在内部,只可以通过对象提供的算法来进行操作,从而实现信息隐蔽。答案:C,.,3下列关于类和对象的叙述中,错误的是。A)一个类只能有一个对象B)对象是类的具体实例C)类是某一类对象的抽象D)类和对象的关系就像数据类型和变量的关系解析:在面向对象设计中,类是同一种对象的抽象,而不只是对一个对象的抽象,一个类具有多个对象。对象是类的具体实例。就像数据类型和变量的关系,一种数据类型可以定义多个变量,一个变量却只能是一种数据类型。答案:A,.,4有以下类声明:classMyClassintnum;则MyClass类的成员num是。A)公有数据成员B)公有成员函数C)私有数据成员D)私有成员函数解析:函数声明时,函数名后必须带“”,所以num是数据成员。在类中,当没有用访问权限标识符标识时,默认为私有权限。答案:C,.,5在下列函数原型中,可以作为类AA构造函数的是。A)voidAA(int);B)intAA();C)AA(int)constD)AA(int);解析:构造函数用于初始纶对象的数据成员,没有返回类型,而且由于常成员函数不能更新对象的数据成员,所以常成员函数也不可能作为构造函数。答案:D,.,6下列关于this指针的叙述中,正确的是。A)任何与类相关的函数都有this指针B)类的成员函数都有this指针C)类的友元函数都有this指针D)类的非静态成员函数才有this指针解析:this指针只能在类的成员函数中使用,它指向该成员函数被调用的对象。但是有两种与类相关的函数都没有this指针,即静态成员函数和友元函数。答案:D,.,7有以下程序:classTestprivate:staticintn;/静态成员public:Test()n+=2;/构造函数Test()n-=3;/析构函数staticintGetNum()returnn;/返回n;intTest:n=1;/初始化nintmain()/主函数main()Test*p=newTest;/定义指针pdeletep;/释放p指向的动太对象coutn=Test:GetNum()endl;/输出nreturn0;/返回值0,返回操作系统执行后的输出结果是。A)n=0B)n=1C)n=2D)n=3解析:静态数据成员初始化的值为1,执行“Test*p=newTest”将调用构造函数,执行“n+=2;”,n的值变为3,执行“deletep;”时将调用析构函数,执行“n-=3;”,n的值减3,变为0。答案:A,.,8有以下程序:classMyClassprivate:intn;/数据成员public:MyClass(intk):n(k)/构造函数intGet()returnn;/返回nintGet()constreturnn+1;/返回n+1;intmain()/主函数main()MyClassa(5);/定义对象aconstMyClassb(6);/定义对象bcouta.Get()b.Get()endl;/输出信息return0;/返回值0,返回操作系统运行后的输出结果是。A)55B)57C)75D)77解析:const是一个判断重载的标志,a.Get调用“intGet()returnn;”,故得到5,而常对象b执行b.Get”时,调用常成员函数“intGet()constreturnn+1;”,故得到6+1=7。答案:B,.,9由于常对象不能被更新,因此。A)通过常对象只能调用它的常成员函数B)通过常对象只能调用静态成员函数C)常对象的成员都是常成员D)通过常对象可以调用任何不改变对象值的成员函数解析:通过常对象只能调用类中的常成员函数,而不能调用类中的其他成员函数。答案:A,.,10下列情况中,不会调用复制构造函数的是。A)用一个对象去初始化同一类的另一个新对象时B)将类的一个对象赋予该类的另一个对象时C)函数的形参是类的对象,调用函数进行形参和实参结合时D)函数的返回值是类的对象的引用,函数执行返回调用时解析:只要在程序的执行中,需要用一个对象来初始化另一个对象,都要调用复制构造函数,包括A、B、C三种情况。答案:D,.,11以下关键字不能用来声明类的访问权限的是。A)publicB)staticC)protectedD)private解析:类的访问权限有三种:公有、私有、保护,关键字分别是public,private,protected,。static用于静态成员的声明。答案:B,.,12有以下程序:classMyClasspublic:MyClass()coutA;/无参构造函数MyClass(charc)coutc;/带参构造函数MyClass()coutB;/析构函数;intmain()/主函数main()MyClassa,*p;/定义变量p=newMyClass(X);/分配动态空间deletep;/释放动态空间coutendl;/换行return0;/返回值0,返回操作系统执行这个程序,屏幕上将显示输出。A)ABXB)ABXBC)ABXBD)AXBB解析:定义对象a时,调用一次构造函数“MyClass()coutA;”,但定义对象指针p时不调用构造函数;使用new动态创建对象时,根据参数情况调用“MyClass(charc)coutc;”,输出X;执行“deletep;”时,需要调用一次析构函数,输出B;最后主函数结束时,对象a调用一次析构函数,输出B。答案:D,.,13有以下程序:classTestpublic:staticinta;/静态成员voidInit()a=1;/初始化函数Test(inta=6)Init();a+;/构造函数;intTest:a=0;/初始化aTestobj;/定义全局对象intmain()/主函数main()coutobj.aendl;/输出areturn0;/返回值0,返回操作系统运行时输出的结果是。A)0B)1C)2D)3解析:首先初始化静态数据成员a为0,然后在定义全局对象obj时调用构造函数。这时有两个a,一个是“Test(inta=6)Init();a+;”函数中的局部变量a,另一个是静态数据成员a,需要靠作用域来区分。在执行Init()时,由于离开了构造函数“Test(inta=6)Init();a+;”的作用域,Init()里的a为静态数据成员,这时静态数据成员a赋值为1;之后回到构造函数执行a+,这个a为“Test(inta=6)Init();a+;”中的a,值变为7,但当构造函数执行完毕后,该局部变量a随之消失,与对象无关。obj.a调用的是静态数据成员,结果为1。答案:B,.,14有以下程序:classTestprivate:longx;/私有数据成员public:Test(longa):x(a)/构造函数friendlongFun(Tests);/友元;longFun(Tests)if(s.x=1)return1;/递归结束elsereturns.x*Fun(Test(s.x-1);/递归调用intmain()/主函数main()intsum=0;/定义变量for(inti=0;i6;i+)sum+=Fun(Test(i);/累加求和coutsumendl;/输出sumreturn0;/返回值0,返回操作系统运行后的输出结果是。A)120B)16C)154D)34解析:友元函数Fun()参数表中的对象在初始化时需执行构造函数“Test:Test(longa)”,调用过程为:先调用构造函数Test(i),使Test中x的值为i,再通过友元函数直接访问Test.x,执行Fun()中的语句,可得到:Fun(Test(0)=1,Fun(Test(1)=1,Fun(Test(2)=2*1,Fun(Test3)=3*2*1=6,Fun(Test(4)=4*3*2*1=24,Fun(Test(5)=5*4*3*2*1=120,sum=1+1+2+6+24+120=154。答案:C,.,15有以下程序:classTestprivate:inta;/数据成员public:Test()cout无参构造函数endl;/无参构造函数Test(inta)coutaendl;/带参构造函数Test(constTest/返回值0,返回操作系统运行时的输出结果是。A)3B)无参构造函数C)复制构造函数D)3析构函数析构函数析构函数解析:创建对象a时带有参数3,故调用构造函数Test(inta),输出3并换行;程序结束时调用析构函数Test(),输出“析构函数”并换行。答案:D,.,16有以下程序:classMyClassprivate:intn;/数据成员public:MyClass(intm):n(m)/构造函数voidPrint()constcoutconst:n=n;/常成员函数voidPrint()coutn=n;/非常成员函数;intmain()/主函数main()constMyClassobj1(10);/常对象MyClassobj2(20);/非常对象obj1.Print();/输出信息obj2.Print();/输出信息coutendl;/换行return0;/返回值0,返回操作系统程序的输出结果是。A)n=10const:n=20B)const:n=10const:n=20C)const:n=10n=20D)n=10n=20解析:根据const修饰符选择对应的构造函数,objl为常对象,调用常成员函数,输出“const:n=10”,obj2为一般对象,调用优先调用非常成员函数,输出“n=20”。答案:C,.,二、填空题,1在面向对象方法中,描述的是具有相同属性与操作的一组对象。解析:在面向对象设计中,一个对象是由一些属性和操作构成的。对象的属性描述了对象的内部细节。类是具有相同属性和操作的一组对象的集合,它为属于该类的所有对象提供统一的抽象描述。答案:类,.,2非成员函数应声明为类的函数才能访问这个类的private成员。解析:类具有数据封装和隐藏的特性,通常只有类的成员函数才能访问类的私有成员,外部函数只能访问类的公有成员。但在某些情况下,需要在类的外部访问类的私有成员,这时必须依靠引入友元来实现。答案:友元,.,3下列程序的输出结果为:01试将程序补充完整。classPointprivate:intx,y;/坐标staticintcount;/静态数据成员public:Point(intm=0,intn=0):x(m),y(n)count+;/构造函数Point()count-;/析构函数intGetX()constreturnx;/返回xintGetY()constreturny;/返回ystaticvoidShowCount()coutcountendl;/输出count;/静态数据成员的初始化intmain()/主函数main()Point:ShowCount();/输出countPointa(6,8);/定义对象Point:ShowCount();/输出countsystem(“PAUSE”);/调用库函数system(),输出提示信息return0;/返回值0,返回操作系统。解析:由第一次调用GetCount()函数输出count的值为0可知,应将其初始化为0,再根据静态数据成员的初始化格式:类型类名:静态成员名字=值;可得横线处填写的语句。答案:intPoint:count=0;,.,4有以下类声明:classMyClassinti;private:intj;protected:intk;public:intm,n;其中私有成员的数量是。解析:在用class声明类的成员声明中,如果没有标识成员的访问权限,则默认为私有的访问权限,故i为私有访问权限。答案:2,.,5有以下程序:classIntegerprivate:intn;/数据成员public:Integer(intn=0)=n;/构造函数voidShow()constcoutn或Integer:n,.,6有以下程序:classApublic:A()coutA;/构造函数A()coutA;/析构函数;intmain()/主函数main()A*p=newA;/定义指针deletep;/释放动态空间coutendl;/换行system(PAUSE);/调用库函数system(),输出系统提示return0;/返回值0,返回操作系统程序的输出结果是。解析:创建动态对象时需调用A的构造函数,输出“A”;释放动态对象时,调用A的析构函数,输出“A”。答案:AA,.,三、编程题,1定义一个满足如下要求的Date类。(1)用下面的格式输出日期:年-月-日(2)设置日期。并编出应用程序,定义日期对象,设置日期,输出该对象提供的日期。参考程序:#include/编译预处理命令usingnamespacestd;/使用命名空间stdclassDateprivate:/数据成员intyear;/年intmonth;/月intday;/日,.,1定义一个满足如下要求的Date类。(1)用下面的格式输出日期:年-月-日(2)设置日期。并编出应用程序,定义日期对象,设置日期,输出该对象提供的日期。参考程序:public:/公有函数Date(inty=2010,intm=1,intd=1):year(y),month(m),day(d)/构造函数voidSet(inty,intm,intd)/设置日期year=y;month=m;day=d;voidShow()const/显示日期coutyear-month-dayendl;intmain()/主函数main()Dated;/定义对象d.Show();/显示日期d.Set(2016,6,18);/设置日期d.Show();/显示日期system(PAUSE);/调用库函数system(),输出提示信息return0;/返回值,返回操作系统,.,2定义一个时间类Time,能提供和设置由时、分、秒组成的时间,并编出应用程序,定义时间对象,设置时间,输出该对象提供的时间。参考程序:#include/编译预处理命令usingnamespacestd;/使用命名空间stdclassTimeprivate:/数据成员inthour;/时intminute;/分intsecond;/秒public:/公有函数Time(inth=0,intm=0,ints=0):/构造函数hour(h),minute(m),second(s)voidSet(inth,intm,ints)/设置日期hour=h;minute=m;second=s;voidShow()const/显示日期couthour:minute:secondendl;intmain()/主函数main()Timet;/定义对象t.Show();/显示时间t.Set(8,6,18);/设置时间t.Show();/显示时间system(PAUSE);/调用库函数system(),输出提示信息return0;/返回值,返回操作系统,.,*3编写设计一个People(人)类。该类的数据成员有姓名(name)、年龄(age)、身高(height)、体重(weight)和人数(num),其中人数为静态数据成员,成员函数有构造函数(People)、进食(Eatting)、运动(Sporting)、显示(Show)和显示人数(ShowNum)。其中构造函数由已知参数姓名(nm)、年龄(a)、身高(h)和体重(w)构造对象,进食函数使体重加1,运动函数使身高加1,显示函数用于显示人的姓名、年龄、身高、体重,显示人数函数为静态成员函数,用于显示人数。假设年龄的单位为岁,身高的单位为厘米,体重的单位为市斤,要求所有数据成员为private访问权限,所有成员函数为public访问权限,在主函数中定义若干个对象,通过对象直接访问类的所有非静态成员函数,通过类访问静态成员函数。参考程序:#include/编译预处理命令usingnamespacestd;/使用命名空间stdclassPeopleprivate:/数据成员charname9;/姓名intage;/年龄intheight;/身高doubleweight;/体重staticintnum;/人数,.,public:/公有函数People(charnm=无名氏,inta=16,inth=168,intw=118):age(a),height(h),weight(w)strcpy(name,nm);num+;voidEatting()weight+;/进食voidSporting()height+;/运动voidShow()const/显示信息cout个人信息:endl;cout姓名:nameendl;cout年龄:age岁endl;cout身高:height厘米endl;cout体重:weight市斤endlendl;staticvoidShowNum()/显示人数cout人数:numendl;intPeople:num=0;/初始化静态数据成员num,.,intmain()/主函数main()Peoplep1;/定义对象p1.Show();/显示信息Peoplep2(李敏,18,170,108);/定义对象p2.Eatting();/进食p2.Sporting();/运动p2.Show();/显示信息People:ShowNum();/显示人数system(PAUSE);/调用库函数system(),输出提示信息return0;/返回值,返回操作系统,.,*4定义一个描述员工(Employee)基本情况的类,数据成员包括编号(num)、姓名(name)、性别(sex)、工资(wage)、人数(count)、总工资(totalWage)。其中姓名定义为长度为18的字符数组,性别为为长度为3的字符数组,其它数据成员类型为整型,总工资和人数为静态数据成员,函数成员包括构造函数、显示基本数据函数(ShowBase)和显示静态数据函数(ShowStatic),其中构造函数由已知参数编号(nu)、姓名(nm)、性别(sx)和工资(wg)构造对象,显示基本数据函数用于显示学生的编号、姓名、性别和工资,显示静态数据函数为静态成员函数,用于显示人数和总工资;要求所有数据成员为protected访问权限,所有成员函数为public访问权限,在主函数中定义若干个员工对象,分别显示员工基本信息,以及显示员工人数和总工资。参考程序:#include/编译预处理命令usingnamespacestd;/使用命名空间stdclassEmployeeprotected:/数据成员intnum;/编号charname18;/姓名charsex3;/姓名intwage;/工资staticintcount;/人数staticinttotalWage;/总工资,.,public:/公有函数Employee(intnu,charnm,charsx,intwg):num(nu),wage(wg)strcpy(name,nm);strcpy(sex,sx);count+;totalWage+=wg;voidShowBase()/显示基本数据cout个人基本信息:endl;cout学号:numendl;cout姓名:nameendl;cout性别:sexendl;cout工资:wage元endlendl;staticvoidShowStatic()/显示静态数据cout人数:countendl;cout总工资:totalWage元endl;intEmployee:count=0;/初始化静态数据成员countintEmployee:totalWage=0;/初始化静态数据成员totalWage,.,intmain()/主函数main()Employeee1(1008,李杰,男,2680);/定义对象e1.ShowBase();/显示基本数据Employeee2(1009,李敏,女,2860);/定义对象e2.ShowBase();/显示基本数据e2.ShowStatic();/显示静态数据system(PAUSE);/调用库函数system(),输出系统提示信息return0;/返回值,返回操作系统,.,C+面向对象程序设计教程,第3章模板习题解答,.,一、选择题,1下列关于模板的叙述中,错误的是。A)模板声明中的第一个符号总是关键字templateB)在模板声明中用“”和“”括起来的部分是模板的类型形参表C)类模板不能有数据成员D)在一定条件下函数模板的类型实参可以省略解析:由模板声明的格式可知选项A、B正确。在调用模板函数时,如果编译系统从模板函数的类型实参表中得到的信息已经能够判断部分或全部虚拟类型参数所对应的实际类型,而且它们又正好是模板形参中最后的若干个参数,则在模板类型实参表中可以省略这几个参数,选项D正确。类模板中可以有数据成员,数据成员的类型可以是虚拟类型,也可以是具体类型,选项C错误。答案:C,.,2有以下函数模板定义:templateElemTypeFun(constElemType解析:当从模板函数类型实参表获得的信息有矛盾时,模板类型实参不能省略。例如选项C中,编译系统从第一个参数3获得的信息是ElemType对应于int,而从第二个参数5.5处获得的信息是ElemType对应于double,两者相互矛盾,因此,编译时将产生错误。解决的方法之一是显式给出虚拟类型参数ElemType对应的模板类型实参,强制ElemType对应于int。答案:C,.,3关于关键字class和typename,下列表述中正确的是。A)程序中typename都可以替换为classB)程序中的class都可以替换为typenameC)在模板类型形参表中只能用typename来声明参数的类型D)在模板类型形参表中只能用class或typename来声明参数的类型解析:程序中的typename都可以替换为class,但程序中的class不可以全部替换为typename。例如:在“模板类型形参表”中,关键字typename和class是可以互换的;但是在“类模板名”前的关键字class代表的含义是类,不可以用typename代替,选项B错误。在模板类型形参表中除了typename和class以外也可以用常规类型来声明参数的类型,选项C、D错误。答案:A,.,4有以下函数模板:templateElemTypeSquare(constElemType其中ElemType是。A)函数形参B)函数实参C)模板类型形参D)模板类型实参解析:由函数模板的定义可知ElemType为模板类型形参。答案:C,.,5C+中的模板包括。A)对象模板和函数模板B)对象模板和类模板C)函数模板和类模板D)变量模板和对象模板解析:C+语言通过模板提供了一种将类型参数化的机制,其中包括函数模板和类模板。答案:C,.,二、填空题,1已知一个函数模板的声明如下:templateT1Fun(T2n)returnn*5.0;若要求以int型数7为函数实参调用该模板函数,并返回一个double型数,则该调用应表示为。解析:当虚拟类型类型参数作为函数的返回值类型,而函数的返回值类型与函数参数的类型可以不同时,不管函数类型实参的类型是什么,均不能省略模板类型实参,此题的模板类型实参应为。答案:Fun(7),.,2已知intdbl(intn)returnn+n;和longdbl(longn)returnn+n;是一个函数模板的两个实例,则该函数模板的声明是template解析:将类型int和long参数化,用模板类型参数ElemType代替,可得该函数模板。答案:ElemTypeDbl(ElemTypen)returnn+n;,.,3下面程序的运行结果是。templateElemTypeMin(constElemType/返回值0,返回操作系统解析:模板函数Min()根据调用它的实参类型的不同,生成不同的函数版本,例如,返回两个int型数的最小值或返回两个double型数的最小值。答案:最小整数=4,最小实型=0.35,.,三、编程题,1试使用函数模板实现输出一个数组各元素的值,要求编写测试程序。参考程序:#include/编译预处理命令usingnamespacestd;/使用命名空间stdtemplatevoidDisplay(ElemTypea,intn)/输出数组a各元素之值for(inti=0;in;i+)coutai;/输出aicoutendl;/换行intmain()/主函数main()inta=1,2,3,4,5,6,7,8,9;/定义数组Display(a,9);/输出asystem(PAUSE);/调用库函数system(),输出系统信息return0;/返回值,返回操作系统,.,2编写一个复数类模板Complex,其数据成员real和image的类型未知,定义相应的成员函数,包括构造函数、输出复数值的函数、求复数和的函数和求复数差的函数,主函数中定义模板类对象,分别以int和double实例化类型参数。参考程序:#include/编译预处理命令usingnamespacestd;/使用命名空间std/声明复数类模板templateclassComplexprivate:/数据成员ElemTypereal;/实部ElemTypeimage;/虚部public:/公有函数Complex(ElemTyper=0,ElemTypei=0):real(r),image(i)voidShow()const;/输出复数staticComplexAdd(constComplex,.,templatevoidComplex:Show()const/输出复数if(imageComplexComplex:Add(constComplex/返回复数,.,intmain()/主函数main()Complexz1(2,3),z2(6,-5),z3;/定义复数对象z1.Show();/输出z1z2.Show();/输出z2z3=Complex:Add(z1,z2);/z3=z1+z2z3.Show();/输出z3z3=Complex:Sub(z1,z2);/z3=z1-z2z3.Show();/输出z3Complexz4(2.1,3.8),z5(6.8,-5.1),z6;/定义复数对象z4.Show();/输出z4z5.Show();/输出z5z6=Complex:Add(z4,z5);/z6=z4+z5z6.Show();/输出z3z6=Complex:Sub(z4,z5);/z6=z4-z5z6.Show();/输出z6system(PAUSE);/调用库函数system(),输出系统提示信息return0;/返回值,返回操作系统,.,*3编写一个使用数组类模板Array对数组求最大值和求元素和的程序,要求编写出测试程序。参考程序:#include/编译预处理命令usingnamespacestd;/使用命名空间std/声明数组类模板templateclassArrayprivate:/数据成员ElemType*elem;/存储数据元素值intsize;/数组元素个数public:/公有函数Array(intsz):size(sz)elem=newElemTypesize;/构造函数Array()deleteelem;/析构函数voidSetElem(ElemTypee,inti);/设置元素值ElemTypeGetElem(inti)const;/求元素值ElemTypeMax()const;/求最大值ElemTypeSum()const;/求元素之和;,.,templatevoidArray:SetElem(ElemTypee,inti)/设置元素值if(i=size)coutElemTypeArray:GetElem(inti)const/求元素值if(i=size)cout元素位置错!endl;exit(2);/退出程序的运行,返回到操作系统returnelemi;/返回元素值elemi,.,templateElemTypeArray:Max()const/求最大值ElemTypem=elem0;/设elem0最大for(inti=1;im)m=elemi;/依次比较求最大值returnm;/返回最大值templateElemTypeArray:Sum()const/求元素之和ElemTypes=0;/定义变量for(inti=1;isize;i+)s=s+elemi;/依次求和returns;/返回和,.,intmain()/主函数main()inta=1,9,7,5,6,3;/定义数组aintn=6;/数组元素个数Arrayobj(n);/定义数组对象inti;/定义变量for(i=0;in;i+)obj.SetElem(ai,i);/设置数组元素值for(i=0;in;i+)coutobj.GetElem(i);/输出元素值coutendl;/换行cout最大值为:obj.Max()endl;/输出最大值cout各元素和为:obj.Sum()endl;/输出各元素之和system(PAUSE);/调用库函数system(),输出系统提示信息return0;/返回值,返回操作系统,.,*4对数组求最大值和求元素和的算法都编写为函数模板,要求编写出测试程序。参考程序:#include/编译预处理命令usingnamespacestd;/使用命名空间stdtemplateElemTypeMax(ElemTypea,intn)/求最大值ElemTypem=a0;/设a0最大for(inti=1;im)m=ai;/依次比较求最大值returnm;/返回最大值templateElemTypeSum(ElemTypea,intn)/求元素之和ElemTypes=0;/定义变量for(inti=1;in;i+)s=s+ai;/依次求和returns;/返回和,.,*4对数组求最大值和求元素和的算法都编写为函数模板,要求编写出测试程序。参考程序:intmain()/主函数main()inta=1,9,7,5,6,3;/定义数组aintn=6;/数组元素个数for(inti=0;in;i+)coutai;/输出元素值coutendl;/换行cout最大值为:Max(a,n)endl;/输出最大值cout各元素和为:Sum(a,n)endl;/输出各元素之和system(PAUSE);/调用库函数system(),输出系统提示信息return0;/返回值,返回操作系统,.,*5对数组求最大值和求元素和的函数采用静态成员函数的方式封装成数组算法类模板ArrayAlg,要求编写出测试程序。参考程序:#include/编译预处理命令usingnamespacestd;/使用命名空间std/声明数组类模板templateclassArrayAlgpublic:/公有函数staticElemTypeMax(ElemTypea,intn)/求最大值ElemTypem=a0;/设a0最大for(inti=1;im)m=ai;/依次比较求最大值returnm;/返回最大值staticElemTypeSum(ElemTypea,intn)/求元素之和ElemTypes=0;/定义变量for(inti=1;in;i+)s=s+ai;/依次求和returns;/返回和;,.,*5对数组求最大值和求元素和的函数采用静态成员函数的方式封装成数组算法类模板ArrayAlg,要求编写出测试程序。参考程序:intmain()/主函数main()inta=1,9,7,5,6,3;/定义数组aintn=6;/数组元素个数for(inti=0;i:Max(a,n):Sum(a,n)endl;system(PAUSE);/调用库函数system(),输出系统提示信息r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论