下载

2下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 C++课件--薛景瑄思考题

C++课件--薛景瑄思考题.doc

C++课件--薛景瑄思考题

jingernanhang
2018-09-05 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《C++课件--薛景瑄思考题doc》,可适用于IT/计算机领域

提示思考题用于帮助同学复习。所以做思考题时必须先进行思考运用课堂上所学知识求得答案。必要时才上机操作进行验证。这样才真有收获。切勿先上机求取思考题结果而少动或不动脑子收获将小得多。第二章思考题(一)判断下列各种描述是否正确对者划√错者划(()引用的运行机理和指针完全相同而其使用却方便的多。()引用的功能和指针相同但却多一项即从函数返回的引用可用作等式左值。()引用是“别名其表指针其实”。也即引用在使用时是一个别名但实质上是一个指针。()填空:()被定义于所有函数之外的变量称为()变量也称()变量。()被定义于某个函数(程序块)之内的变量称为()变量也称()变量。()静态变量分为()静态变量和()静态变量两种。()所有函数的代码通常都被存放在内存的()区。全局变量和所有静态变量通常都被存放在内存的()区。所有函数中的局部变量、函数参数、所用通用寄存器的值、返主地址等通常在该函数被调用时被存放在内存的()区。使用new所分配的空间被存放在内存的()区。(三)给出以下程序的运行结果:()calvalcppcallbyvalue#include<iostreamh>voidinc(intv){v}voidmain(){inti=inc(i)cout<<i<<endl}()calptrcppcallbypointer#include<iostreamh>voidinc(int*v){(*v)}voidmain(){inti=inc(i)cout<<i<<endl}()calrefcppcallbyreference#include<iostreamh>voidinc(intv){v}voidmain(){inti=inc(i)cout<<i<<endl}(四)给出以下程序的运行结果并画出程序中执行第一、第二、第三和第五语句后两个变量的内存存储内容:#include<iostreamh>voidmain(){intval()intrefv=val()val=()cout<<"变量与引用的值:"<<val<<","<<refv<<endlrefv=()cout<<"重新赋值后变量与引用的值:"<<val<<","<<refv<<endl}(五)给出以下程序的运行结果:exerchcppImprovedversionofexampleonpofLv'sbook#include<i元函数是成员函数。B友元函数可直接访问类中的私有成员。C友元函数破坏封装性应尽量少用。D友元类中的所有成员函数都是友元函数。()在有关类和对象的描述中()是错的:A对象是类的一个实例。B任何一个对象只能属于一个类。C一个类只能有一个对象。D类和对象的关系与数据类型和变量的关系相似。()下列关于对象数组的描述中()是错误的。A对象数组只能赋初值而不能再赋值。B对象数组的下标(序号)从开始。C对象数组的每个元素都是相同类的对象。D对象数组的数组名是一个常量指针。()下列关于子对象的描述中()是错误的。A子对象是另一个类的一种数据成员。B子对象不可以是自身类的对象。C对子对象的初始化必须通过构造函数中的初始化列表。D一个类中只能含有一个子对象作其成员。()在new运算符的下列描述中()是错误的。A它可以动态地创建对象或对象数组。B用它创建对象数组时必须指定初始值。C构造函数可用它在堆区内创建对象或对象数组。D当构造函数使用它在堆区内创建对象或对象数组时在程序结束前应使用运算符delete来释放所分配的堆区空间。()在delete运算符的下列描述中()是错误的。A用它可以释放用new运算符创建的对象和对象数组所分配的堆空间。B用它释放一个对象的堆空间时它作用于一个new所返回的指针。C用它释放一个对象数组的堆空间时它作用的指针名前须加下标运算符。D用它释放一个对象的堆空间时它同时删除new所返回的指针。(二)判断下列各种描述是否正确对者划√错者划(()一个类中可以只有公有成员也可以只有私有成员也可以公有、私有成员都有。()用class定义的类中缺省的访问权限是公有的。()建立一个类的对象时系统将其非静态数据成员存储于该对象的栈区存储空间内。而该类的静态数据成员和成员函数则分别存储于其它不同的分区内。()析构函数是一个函数体为空的成员函数。()如果一个成员函数只访问一个类的静态数据成员则可将该成员函数说明为静态成员函数。()可在类的构造函数的初始化列表中对其静态数据成员进行初始化。()一个类的友元类中的所有成员函数都可对该类中的私有成员进行存取操作。(三)给出以下程序的运行结果:exercppLv'sbook,p#include<iostreamh>classC{staticintcpublic:C(){cout<<c<<endl}staticintGetc(){returnc}~C(){cout<<c<<endl}}intC::cvoidmain(){Cc,c,c,c,ccout<<C::Getc()<<endl}(四)给出以下程序的运行结果:exerchcpp#include<iostreamh>classM{intm,mpublic:M(){}M(inti,intj){m=im=j}voidSum(Ma,Mb){m=ambmm=ambm}voidprint(){cout<<"m="<<m<<",m="<<m<<endl}}voidmain(){Ma(,)Mb(a)MccSum(a,b)cprint()}(五)判断下列描述是否正确对者划√错者划(。()对象和指向对象的指针都可以用作函数参数。()对象数组的元素必须是同一个类的对象。()一维对象指针数组的每个元素应该是同一个类的不同对象的地址值。()运算符new可以创建变量或对象也可以创建变量数组或对象数组。()子对象的初始化可在复合类的构造函数内进行。(六)给出以下程序的运行结果:exerchcpp#include<iostreamh>classB{intmpublic:B(inti=){m=icout<<"Constructorcalled"<<m<<endl}voidPrint()const{cout<<m<<endl}~B(){cout<<"Destructorcalled"<<m<<endl}}voidfun(constBc){cPrint()}voidmain(){fun()ieBb()fun(b)}(七)给出以下程序的运行结果exerchcpp#include<iostreamh>classB{intb,bpublic:B(inti,intj)voidprintB()}B::B(inti,intj){b=ib=j}voidB::printB(){cout<<"b="<<b<<",b="<<b<<endl}classA{intaBobjpublic:A(inti,intj,intk)voidprintA()}A::A(inti,intj,intk):obj(i,j),a(k){}voidA::printA(){objprintB()cout<<"a="<<a<<endl}voidmain(){Ax(,,)xprintA()}(八)给出以下程序的运行结果:exerchcpp#include<iostreamh>classM{staticintAstaticintBpublic:M(inta){A=aB=a}staticvoidfun()}voidM::fun(){cout<<"A="<<A<<endlcout<<"B="<<B<<endl}intM::A=intM::B=voidmain(){MP()M::fun()MQ()Qfun()}(九)给出以下程序的运行结果:Toshowdifferentstatusofauto,staticandexternaldatastaticandexternaldataareinitializedonlyonceandexistallthetime#include<iostreamh>voidstaticf(void)voidautof(void)voidexternalf(void)intg=voidmain(){autof()autof()staticf()staticf()externalf()externalf()}functiontoreadandincrementanautodatumvoidautof(void){inti=i=cout<<i<<endl}functiontoreadandincrementastaticdatumvoidstaticf(void){staticinti=i=cout<<i<<endl}functiontoreadandincrementanexternaldatumvoidexternalf(void){g=cout<<g<<endl}(十)填空:()一般程序有四个分区它们是:()、()、()和()。()()用于存放主程序和各子程序(包括各类中的成员函数)代码()()用于存放全局变量和数据()()用于存放局部变量函数参数寄存器值等()()用于为由new所创建的对象或其数组动态地分配存储空间第四章思考题(一)选择填空:()下列对派生类的描述中()是错误的。A一个派生类可以用作另一个派生类的基类。B派生类至少应有一个基类。C基类中成员被派生类继承后其映射的访问权限并不改变。D派生类对象的单独内存存储内容中除了本类部分的所有非静态数据成员外还首先包含了它的基类部分的所有非静态数据成员。()主函数main可以访问派生类的对象中哪一类基类成员?()A公有继承的基类部分的公有成员。B公有继承的基类部分的保护成员。C公有继承的基类部分的私有成员。D保护继承的基类部分的公有成员。()多继承派生类建立对象时()被最先调用。A派生类自己的构造函数。B虚基类的构造函数。C非虚的基类的构造函数。D派生类中子对象的构造函数。(二)判断下列描述的正确性对者划√错者划(()C语言中允许单继承也允许多继承。()派生类不能再派生出新的类。()在公有继承中派生类对象的成员函数可以访问基类部分中的私有成员。()在公有继承中派生类对象的成员函数不可以访问基类部分中的保护成员。()在私有继承中派生类对象的成员函数不可以访问基类部分中的公有成员。()在保护继承中派生类对象的成员函数可以访问基类部分中的保护成员。(三)画出以下题中的DAG和访问控制表exerchcppFromLv'sbook,p#include<iostreamh>classA{inta,bpublic:A(inti,intj){a=ib=j}voidMove(intx,inty){a=xb=y}voidShow(){cout<<"("<<a<<","<<b<<")"<<endl}}classB:privateA{intx,ypublic:B(inti,intj,intk,intl):A(i,j){x=ky=l}voidfun(){Move(,)}}voidmain(){Aa(,)Bb(,,,)bfun()}(四)画出以下题中的DAG和访问控制表exerchcppFromLv'sbook,p#include<iostreamh>classL{public:voidInitL(intx,inty){X=xY=y}voidMove(intx,inty){X=xY=y}private:intX,Y}classR:publicL{public:voidInitR(intx,inty,intw,inth){InitL(x,y)W=wH=h}private:intW,H}classV:publicR{public:voidfun(){Move(,)}}voidmain(){VvvInitR(,,,)vfun()}(五)画出以下程序的访问控制表并根据该表找出错误语句将它删去后显示运行结果。#include<iostreamh>classA{intiaprotected:intjapublic:A(){ia=ja=}voidfa(){cout<<ia<<''<<ja<<endlcout<<"fa"<<endl}}classB:publicA{intibprotected:intjbpublic:B(){ib=jb=}voidfb(){cout<<ib<<''<<jb<<endlcout<<ia<<endlcout<<ja<<endlfa()cout<<"fb"<<endl}}classC:publicB{public:voidfc(){cout<<ia<<endlcout<<ja<<endlfa()cout<<ib<<endlcout<<jb<<endlfb()}}voidmain(){Cobjccout<<objcia<<''<<objcja<<endlobjcfa()cout<<objcib<<''<<objcjb<<endlobjcfb()}(六)画出以下程序的访问控制表并根据该表找出错误语句将它删去后显示运行结果。#include<iostreamh>classA{protected:和前一程序不同处voidf(inta){cout<<a<<endl}voidg(){cout<<"g()"<<endl}}classB:Aprivate和前一程序不同处{public:voidh(){cout<<"h()"<<endl}}voidmain(){Bobjbobjbf()objbg()objbh()}(七)已有以下定义的头文件及基类classperson要求另外写一个头文件从基类中派生出一个classadult包括一项数据intretire以便在name和sex之外再增加一个调查项目“retired”派生类的display()应该能同时显示三项内容。personh#if!defined(PERSONH)#definePERSONH#include<iostreamh>#include<stringh>classperson{protected:char*namecharsexpublic:person(char*nm,charsx){name=newcharstrlen(nm)strcpy(name,nm)sex=sx}voiddisplay()const{cout<<"namet:"<<name<<endlcout<<"sext:"<<sex<<endl}~person(){deletename}}#endifpersonh(八)画出程序中对象objc的栈区存储内容。#include<iostreamh>classA{protected:intia}classM{protected:intim}classB:publicA{protected:intib}classC:B{protected:inticMobjm}voidmain(){Cobjc}(九)填入成员初始化列表中的共个空处:(简化后的“§:”中的例)virclscpp#include<iostreamh>classA{intiapublic:A(inti){ia=icout<<"A::"<<ia<<endl}}classV:publicA{intiapublic:V(inti):(){ia=icout<<"V::"<<ia<<endl}}classB:virtualpublicV{public:B(charch,inti):(){cout<<"B::"<<ch<<endl}}classC:virtualpublicV{public:C(charch,inti):(){cout<<"C::"<<ch<<endl}}classM{public:M(doubledd){cout<<"M::"<<dd<<endl}}classD:publicB,publicC{Mmemberpublic:D(chara,charb,intc,doubled,char*e):(,),(,),(),(){cout<<"D::"<<str<<endl}}voidmain(){Dd('Z','P',,,"yes")}(十)写出以下程序运行结果:exerchcppInitializationofargumentofvirtualbaseoffourlevelsofderivedclasses#include<iostreamh>classB{public:B(inti){b=i}intb}classV:publicB{public:V(inti,intj):B(i){v=j}intv}classX:virtualpublicV{public:X(inti,intj):V(i,j){x=j}intx}classY:virtualpublicV{public:Y(inti,intj):V(i,j){y=j}inty}classW:publicX,publicY{public:W(inta,intb,intc,intd,inte,intf):X(a,b),Y(c,d),V(e,f){w=a}intw}voidmain(){Wobj(,,,,,)cout<<objb<<endlcout<<objv<<endlcout<<objx<<endlcout<<objy<<endlcout<<objw<<endl}(十一)写出以下程序运行结果:exerchcpp#include<iostreamh>classbase{intxbpublic:base(inta=){xb=a}voidincb(){xb}voidshow(){cout<<"xb="<<xb<<endl}}classderive:publicbase{intxdpublic:derive(inta=,intb=):base(a){xd=b}voidincd(){xd}voidshow(){base::show()cout<<"xd="<<xd<<endl}}classgrand:publicderive{intxgpublic:grand(inta=,intb=,intc=):derive(a,b){xg=c}voidincg(){xg}voidshow(){derive::show()cout<<"xg="<<xg<<endl}}voidmain(){basebsderiveder()grandgr(,)bsincb()derincb()derincd()grincb()grincd()grincg()cout<<"Objectbs:n"bsshow()cout<<"Objectder:n"dershow()cout<<"Objectgr:n"grshow()}第五章思考题(一)选择填空:()定义重载函数的下列条件中()是错误的。A要求参数个数不同B要求参数类型不同C要求函数返回值类型不同D要求在参数个数相同时参数类型的顺序不同()下列函数中()不能重载。A成员函数B非成员函数(普通函数)C构造函数D析构函数()下列有关运算符重载的描述中()是正确的。A运算符重载可改变其优先级B运算符重载不改变其语法结构C运算符重载可改变其结合性D运算符重载可改变其操作数的个数()关于下列虚函数的描述中()是正确的。A虚函数是一个static存储类的成员函数。B虚函数是一个非成员函数。C基类中说明了虚函数后派生类中可不必将对应的函数说明为虚函数因虚特性可继承。D派生类的虚函数与基类的同名虚函数的形参应具有不同的类型或个数。()关于纯虚函数和抽象类的描述中()是错误的。A纯虚数是一种特殊的虚函数它没有具体实现(定义)。B抽象类中至少具有一个纯虚函数。C抽象类的派生类中一定不会再有纯虚函数。D抽象类一般作为基类使用而由其派生类给出纯虚函数的实现(定义)。()以下一种类中()不能建立对象。A抽象类B派生类C虚基类D基类()下列构造函数的特点中()是错误的:A构造函数具有一般成员函数的特点。B构造函数的名称与其类名相同。C构造函数必须指明其类型即返回值。D,一个类中可定义个或多个构造函数。()下列关于成员函数(不包括构造和析构函数)的特性中()是错误的:A成员函数都可以重载。B成员函数都是内联函数。C成员函数都可以设置缺省参数。D成员函数的访问权限可以是公有属性的也可以是私有属性的。(二)判断下列描述对者划√错者划(()函数参数个数和类型都相同只是返回值类型不同者这不是重载函数。()重载函数不能带有缺省参数。()运算符重载有两种形式:成员函数形式和友元函数形式。()运算符重载后不改变原来的优先级和结合性。()虚函数是一种由virtual关键词说明的成员函数。()抽象类中只能有一个纯虚函数。()析构函数不能说明为虚函数。()程序中可以说明(建立或定义)抽象类的指针或引用但是不能说明(建立或定义)抽象类的对象。(三)给出以下程序运行结果并画出对象objy的栈区存储内容exerchcppoverloadedconstructors#include<iostreamh>classA{inta,apublic:A()A(inti,intj)voidprint()}A::A(){a=a=cout<<"Dafaultconstructorcalledn"}A::A(inti,intj){a=ia=jcout<<"Constructorcalledn"}voidA::print(){cout<<"a="<<a<<",a="<<a<<endl}voidmain(){Aobjx,objy(,)cout<<"sizeof(objy):"<<sizeof(objy)<<endlobjxprint()objyprint()}(四)给出以下程序运行结果exerchcpp#include<iostreamh>classB{intx,ypublic:B()B(inti)B(inti,intj)~B()voidPrint()}B::B(){x=y=cout<<"Defaultconstructorcalledn"}B::B(inti){x=iy=cout<<"Constructortypecalledn"}B::B(inti,intj){x=iy=jcout<<"Constructortypecalledn"}B::~B(){cout<<"Destructorcalledn"}voidB::Print(){cout<<"x="<<x<<",y="<<y<<endl}voidmain(){B*pp=newBp=B(,)p=B()p=B()for(inti=i<i)piPrint()deletep}(五)给出以下程序运行结果exerchcpp#include<iostreamh>classbase{public:voidwho(){cout<<"base"<<endl}}classderive:publicbase{public:voidwho(){cout<<"derive"<<endl}}classgrand:publicderive{public:voidwho(){cout<<"grand"<<endl}}voidmain(){basebs,*ptrderivefrgrandscptr=bsptr>who()ptr=frptr>who()ptr=scptr>who()}(六)给出以下程序运行结果并分别画出三个对象bs、dr、grd的三区存储内容(包括vtable所在数据区和虚函数调用指令所在代码区)。exerchcpp#include<iostreamh>classbase{intipublic:base(inta=){i=a}virtualvoidwho(){cout<<"base"<<endl}virtualvoidshow(){cout<<i<<endl}}classderive:publicbase{intipublic:derive(inta=){i=a}voidwho(){cout<<"derive"<<endl}voidshow(){cout<<i<<endl}}classgrand:publicderive{intipublic:grand(inta=){i=a}voidshow(){cout<<i<<endl}voidwho(){cout<<"grand"<<endl}}voidmain(){basebs,*ptrderivedrgrandgrdcout<<"sizeof(bs):"<<sizeof(bs)<<endlcout<<"sizeof(dr):"<<sizeof(dr)<<endlcout<<"sizeof(grd):"<<sizeof(grd)<<endlptr=bsptr>who()ptr=drptr>who()ptr=grdptr>who()bsshow()drshow()grdshow()}(七)给出以下程序运行结果exerchcppoverloadingofoperatorfunction#include<iostreamh>#include<stdlibh>constMIN=constMAX=classVector{int*pintsizearraylengthpublic:Vector(intsz){if(sz<MIN||sz>MAX){sz=(sz>MINMAX:MIN)cout<<"Sizeerror!Newsizeis"<<sz<<endl}endofifblockp=newintszsize=sz}~Vector(){deletep}intindexintoperator(inti)}intVector::operator(inti){returnedreference,tobeusedasleftvalueif(i<||i>=size){cout<<"Wrongindex("<<i<<")"cout<<"hasbeenupdatedto"i=(i>(size):)cout<<i<<endl}index=ireturnpi}voidmain(){Vectorve()ve=cout<<"ve"<<veindex<<"="<<veveindex<<endlVectorve()ve=cout<<"ve"<<veindex<<"="<<veveindex<<endlve=cout<<"ve"<<veindex<<"="<<veveindex<<endl}(八)找出一下程序中的错误语句将它删去后显示运行结果。exerchcpp#include<iostreamh>classA{public:virtualvoidfun()=virtualvoidwork()=}classB:publicA{public:voidfun(){cout<<"B::fun"<<endl}}classC:publicB{public:voidwork(){cout<<"C::work"<<endl}}voidmain(){Bobjbobjbfun()Cobjcobjcfun()objcwork()}(九)给出以下程序运行结果exerchcppsimultaneoususeofdivoperatorandconversionoperator#include<iostreamh>classdivision{public:doublenumeratordivision(doublei){numerator=i}doubleoperator(doubledenominator)}doubledivision::operator(doubledenominator){if(denominator==){cout<<"attemptedtodividebyzero"<<endlreturn}return(numeratordenominator)}voidmain(){doublenum=,den=divisionobjnum(num)for(intj=j<j){if(j==)num=if(j==)den=cout<<"objnumden:"<<objnumden<<endlcout<<"numden:"<<numden<<endl}for}第六章思考题(一)部分选自吕书p-p:选择填空:()已定义以下函数模板:template<typenameT>Tfun(Ta,Tb){…………}在生成下列模板函数时()是错误的:Amax(int,int)Bmax(double,double)Cmax(char,char)Bmax(int,double)()在下列关于类模板的描述中()是错误的:A定义类模板时只允许有一个模板参数。B类模板的类体内所说明(声明)的成员函数的实现与函数模板类似。C类模板实例化而生成模板类时必须制定实际的参数类型。D类模板不是一个类而是一组类的模板。()在下列关于模板的描述中()是正确的:Atemplate<T>Btemplate<typenameT,T>Ctemplate<typenameT,typenameT>Dtemplate<T,typenameT>(二)判断下列各种描述是否正确对者划√错者划(()C中的模板分为函数模板和类模板两种。()函数模板中参数化的类型名(实际的参数类型)可以使用任何一种类型。()函数模板中参数类型被预定义数据类型或用户自定义数据类型替代(称为实例化)后所生成的函数称为模板函数。()函数模板可以重载。()类模板用作基类可生成派生的类模板。(三)填空:()在使用函数模板时函数模板首先被实例化为()然后它再被调用。()在使用类模板时类模板首先被实例化为()然后它再一次被实例化为()最后再被调用。(四)下题的类模板中使用非类型参数请给出运行结果exerchcpp,templcpp#include<iostreamh>template<typenameT,intN>classArray{public:TbufNvoidsetnum(Tdata){for(inti=i<Ni)bufi=datai}voidgetnum(){for(inti=i<Ni)cout<<bufi<<""cout<<endl}}voidmain(){Array<int,>objiobjisetnum()objigetnum()Array<double,>objdobjdsetnum()objdgetnum()}(五)在主程序中填入三个数据(’H’,,)中的一个并给出运行结果exerchcpp,templcpp#include<iostreamh>template<typenameX,typenameY=int>'int'isadefaultparameterclassA{public:voidf(Xa){cout<<a<<endl}voidg(Yb){cout<<b<<endl}}voidmain(){A<char>bbbbg()bbf()A<int,double>ccccg()ccf()}(六)在主程序中填入以下数据(’A’,,"Yousucceeded!")中的一个并给出运行结果tempdercppdefaultparameterandinheritanceofparameters#include<iostreamh>template<classT>classA{public:voidf(Ta){cout<<a<<endl}}template<classT>classB{public:voidg(Tb){cout<<b<<endl}}template<classX,classY,classZ=char>classD:publicA<Y>,publicB<Z>{public:voidh(Xc){cout<<c<<endl}}voidmain(){D<char*,double>objobjf()objg()objh()D<char*,int,double>objobjf()objg()objh()}(七)请给出以下程序的运行结果exerchcpp#include<iostreamh>template<classT>Tmax(Tx,Ty){cout<<"templatefunction:maxis"return(x>y)x:y}doublemax(doubled,inti){cout<<"overloadedfunctionwithdouble,int:maxis"return(d>i)d:i}doublemax(inti,doubled){cout<<"overloadedfunctionwithint,double:maxis"return(d>i)d:i}voidmain(){inti=,j=floatf=,g=doubled=,e=cout<<max(i,j)<<endlcout<<max(f,g)<<endlcout<<max(i,d)<<endlcout<<max(g,j)<<endlcout<<max(i,f)<<endlcout<<max(d,e)<<endl}(八)请给出以下程序的运行结果templovrcpp#include<iostreamh>template<classT>Tmax(Tx,Ty){cout<<"templatefunction:maxis"return(x>y)x:y}intmax(doubled,inti){cout<<"overloadedfunctionwithdouble,int:maxis"return(d>double(i))d:double(i)}intmax(inti,doubled){cout<<"overloadedfunctionwithint,double:maxis"return(d>double(i))d:double(i)}voidmain(){inti=,j=charch='a',ch='z'doubled=,e=cout<<max(i,j)<<endlcout<<max(ch,ch)<<endlcout<<max(i,d)<<endlcout<<max(e,j)<<endlcout<<max(d,e)<<endl}(九)在以下程序的六个空处填入四个模板类型参数和两个数据参数并给出运行结果。exerchcpp#include<iostreamh>template<typenameT>classA{public:A(Ta){cout<<"CONSA:"<<a<<endl}}template<typenameS,typenameT>classB:publicA<>{public:B(Sa,Tb):A<>(){cout<<"CONSB:"<<a<<endl}}template<typenameX,typenameY,typenameZ>classD:publicB<X,>{public:D(Xa,Yb,Zc):B<X,>(a,){cout<<"CONSD:"<<c<<endl}}voidmain(){D<int,char*,double>obj(,"good",)}第七章思考题()填空:.当用户使用系统提供的异常类classexception时应在程序中包含头文件<()>。.抛出异常时一定要在()程序块中或它所调用的函数中使用()语句。被抛出的异常对象可以是()类型的数据及其指针或引用但更经常使用的是()自定义类型例如类或异常类的对象及其指针或引用。被抛出的类对象可以是()所提供的异常类classexception的对象也可以是()自己所定义的类或异常类的对象。在捕获异常以便进行处理时通常使用()程序块。(二)判断下列各种描述是否正确对者划√错者划(异常处理是由程序设计语言提供的运行时刻错误处理的一种方式。当用户自己定义异常类时也可以将它定义为系统异常类classexception的派生类。当程序不出错时程序按照顺序控制结构逐条语句地向下执行。而当程序出错时程序就在抛出异常处中断不再执行以后的语句并转移到catch程序块继续处理异常。如果被抛出的异常对象是预定义数据类型的数据当浮点型数据异常被抛出时可由catch(doubled)程序块捕获异常。当整型数据异常被抛出时可由catch(inti)程序块捕获异常。格式为catch(…)的程序块可用于捕获多种类型的异常一个catch块最多只可以有一个catch块参数。C中任何类都可被用作异常类它不一定须要是从系统异常类classexception中派生出来的异常类。(三)请给出以下程序的运行结果exerchcppcascadedinvocationofsubroutines#include<iostreamh>#include<exception>doublequotient(intnumerator,intdivisor){if(divisor==)throwexception("dividebyzero")return(double)numeratordivisor}doubleg(intnumerator,intdivisor){doubleresult=quotient(numerator,divisor)cout<<"functiong()inreturnpath!"<<endlreturnresult}doublef(intnumerator,intdivisor){doubleresult=g(numerator,divisor)cout<<"functionf()inreturnpath!"<<endlreturnresult}voidmain(){doubleresulttry{result=f(,)cout<<"Thequotientis:"<<result<<endl}catch(exceptionex){cout<<exwhat()<<"exception!"<<'n'}}(四)请给出以下程序的运行结果本题的程序exerchcpp和第三题exerchcpp只差一个数据原为:result=f(,)现改为:result=f(,)(五)请给出以下程序的运行结果exerchcpp#include<iostreamh>#defineMAXT#defineMINTinttemperature=classexcept{char*messagepublic:except(){message=}except(char*ptr){message=ptr}virtualconstchar*what()const{returnmessage}virtualvoidhandling(){cout<<"TemperatureincorrectChangeitagain!"<<endltemperature=}voidaction(){cout<<"Exception:"<<what()<<'n'handling()}}classexceptderive:publicexcept{char*messagepublic:exceptderive(char*ptr){message=ptr}virtualconstchar*what()const{returnmessage}virtualvoidhandling(){cout<<"TemperatureincorrectChangeitagain!"<<endltemperature=}}voidmain(){char*meslow={"Temperaturetoolow!"}char*meshigh={"Temperaturetoohigh!"}boolflag=truewhile(flag){try{if(temperature<MINT)thrownewexcept(meslow)if(temperature>MAXT)thrownewexceptderive(meshigh)cout<<"Thetemperatureequalsto"<<temperature<<endlflag=false}catch(except*ptr){ptr>action()}}while}请注意:本题中使用循环结构。(六)请给出以下程序的运行结果。本题的exerchcpp程序中只有一条语句和上题的exerchcpp不同:原为:inttemperature=现改为:inttemperature=(七)请给出以下程序的运行结果。exerchcpp#include<iostreamh>voidmain(){intLowerLimit=intdivisor=intnumerator=try{if(divisor==)throwif(numerator<LowerLimit)throw"Lowerlimitviolation!"cout<<"Divisionresultis:"<<(double)numeratordivisor<<endl}catch(intx){cout<<"Exception:divisor"<<x<<endl}catch(char*str){cout<<"Exception:"<<str<<endl}}(八)上题中两条语句如改变为下值:原为:intdivisor=intnumerator=现改为:intdivisor=intnumerator=请给出运行结果。(九)请给出以下程序的运行结果exerchcpp#include<iostreamh>#defineMAXT#defineMINTinttemperature=doubledenominator=classexcept{char*messagepublic:except(char*ptr="Temptoolow!"){message=ptr}virtualconstchar*what()const{returnmessage}virtualvoidhandling(){cout<<"temperature="<<(temperature=)<<endl}voidaction(){cout<<what()<<endlhandling()}}classexceptderive:publicexcept{char*messagepublic:exceptderive(char*ptr="Temptoohigh!"){message=ptr}virtualconstchar*what()const{returnmessage}virtualvoidhandling(){cout<<"temperature="<<(temperature=)<<endl}}classexceptgrand:publicexceptderive{char*messagepublic:exceptgrand(char*ptr="Dividebyzero!"){message=ptr}virtualconstchar*what()const{returnmessage}virtualvoidhandling(){cout<<"denominator="<<(denominator=)<<endl}}doublequotient(doublenumerator,doubledenominator){if(denominator==)thrownewexceptgrand()returnnumeratordenominator}voidmain(){doublenumerator=boolflag=truewhile(flag){try{if(temperature<MINT)thrownewexcept()if(temperature>MAXT)thrownewexceptderive()cout<<"Thequotientis:"<<quotient(numerator,denominator)<<endlflag=false}catch(except*m){cout<<"Exception:"m>action()deletem}}while}(十)请给出以下程序的运行结果此程序与第九题的不同点只有一处:inttemperature=改为inttemperature=第八章思考题(一)选择填空:()进行文件操作时应包含()头文件:AmathhBfstreamhCstdiohDctypeh()在使用open函数打开文件时open函数第二个参数mod所采用的值中()是以追加方式打开文件的。AinBoutCapp(append的缩写)Date()下列函数中()用于对文件进行写操作。Aget()Bread()Cgetline()Dput()()使用操纵函数和操纵符进行格式化输出时应包含头文件()。AmathhBstdlibhCiomaniphDstringh()在ios类中提供的控制格式的标志位中()是用于转换为十六进制格式的标志位。AhexBoctCdecDapp(二)请给出以下程序的运行结果感谢武艳强同学指出此题曾有错现已改正exerchcpp#include<iostreamh>classmyclass{charname已改正intagepublic:friendistreamoperator>>(istream,myclass)friendostreamoperator<<(ostream,myclass)}istreamoperator>>(istreaminput,myclassobj){cout<<"Inputnameandage:n"input>>objname>>objage原先此处操作有误returninput}ostreamoperator<<(ostreamoutput,myclassobj){cout<<"name="output<<objnamecout<<endl<<"age="output<<objagecout<<endlreturnoutput}voidmain(){myclassobjcin>>objcout<<obj}(三)请给出以下程序的运行结果#include<iostreamh>voidmain(){doubled=cout<<d<<endldefaultprecisioniscoutprecision()coutwidth()coutfill('^')cout<<d<<endlcoutsetf(ios::left,ios::adjustfield)coutwidth()cout<<d<<endlcoutprecision()cout<<d<<endl}(四)请给出以下程序的运行结果#include<iostreamh>#include<iomaniph>voidmain(){cout<<setfill('^')cout<<<<setw()<<<<endlcout<<setw()<<<<<<endlcout<<<<setw()<<hex<<<<endlcout<<setprecision()<<<<':'<<<<endl}(五)请给出以下程序的运行结果formattedIOasatable#include<iostreamh>#include<iomaniph>voidmain(){doubled=,f=cout<<setw()<<d<<setw()<<f<<endldefaultprecisioniscoutprecision()cout<<setw()<<d<<setw()<<f<<endlcoutprecision()cout<<setw()<<d<<setw()<<f<<endl}(六)填充:是istreamwithassign流类的对象它是(缓存、非缓存)类型,,是ostreamwithassign流类的对象其中和是(缓存、非缓存)类型而是(缓存、非缓存)类型。()选择填空:()用户在自定义流输入运算符operator>>的重载函数时其返回值应为():AistreamBistreamCistream*Dostream()用户在自定义流输出运算符operator<<的重载函数时其返回值应为():AostreamBostream*CostreamDistream(思考题完

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/33

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利