C++程序设计练习题与答案_第1页
C++程序设计练习题与答案_第2页
C++程序设计练习题与答案_第3页
C++程序设计练习题与答案_第4页
C++程序设计练习题与答案_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

C++程序设计练习题一、填空题1.对象的三大基本特性分别为多态性、()、封装性。2.赋值运算符应重载为()函数。3.用()声明的基类称为虚基类。4.用()声明的函数称为虚函数。5.派生类对基类继承控制访问有三种。派生类可以定义其基类中不具备的()。6.静态成员是对象的成员,()函数不是类的成员。7.在函数体之前加()关键字可以防止覆盖函数改变数据成员的值。—个const对象只能访问()成员函数。9.使用友元函数是为了提高程序效率,且节约了()开销。类名为“ClassName”的类,其拷贝构造函数的原型说明是()。由关键字private、public和protected限定成员的访问权限分别是()、()和()。缺省关键字时成员的访问权限为()。如果想要公共基类在派生类中只有—个拷贝,就要将公共的基类说明为();如果虚基类没有默认构造函数,就必须在每—个派生类的构造函数中都要调用虚基类的()函数。静态成员函数是使用关键字()说明的成员函数。—函数的原型声明为“voidFunName(int=0,double=0,char二'x');”,则调用FunName函数的方法共有()种。编译时多态性是通过()实现的;运行时多态性是通过()实现的。C++通过()实现编译时多态性,通过()实现运行时多态性。TOC\o"1-5"\h\z在C++中,声明类的关键字是()。声明C++模板的关键字是()。调用函数原型声明为“voidFunName(short,int=0,float二;”的方法有()种。处理C++异常的方法:采用()结构。用关键字()、()和()限定的成员,其访问权限分别为:公有的、私有的和保护的。缺省关键字时,成员的访问权限为()。在C++中,处理()的方法是采用try-catch结构。在C++中,用关键字()说明内置函数。TOC\o"1-5"\h\z在C++中,声明友元函数的关键字是()。将公共基类说明为()时,多重派生过程中公共基类在派生类中就只有—个拷贝了。在C++中,如果函数调用在前、定义在后,就必须先对函数进行()。在成员函数头之后、函数体之前加()修饰的成员函数称为类的常成员函数。包含纯虚函数的类称为抽象类,这种类只能用作()来派生新类。由于抽象类的特殊性,我们可以说明抽象类的(),但不能说明抽象类的()。说明函数类型为“double”、函数名为“virfun”且无参数的纯虚函数的表达形式为()。说明静态成员要使用关键字()。当函数调用在前定义在后时,必须先对函数进行()说明。类名为“ClassN”的类的拷贝构造函数的函数原型说明为()。抽象类是包含()的类,必须注意:不能说明抽象类的(),但可说明抽象类的()。流插入运算符<<只能重载为友元函数,重载流插入运算符<<的函数名为()。要防止在该成员函数中改变数据成员的值,就要在类的成员函数名之后、函数体之前加上关键字()。

36.类和对象的关系可表述为:类是对象的(),而对象则是类的()。37.在C++中,三种继承方式的说明符号为()、()和(),如果不加说明,则默认的继承方式为()。38.如果只想保留公共基类的一个复制,就必须使用关键字()把这个公共基类声明为虚基类。TOC\o"1-5"\h\z39.若要把voidmyfun()定义为类A的友元函数,则应在类A的声明中加入语句()。40.类的静态成员分为()和()。41.运算符重载要求保持其原来的操作数个数、()、()和语法结构。42.通过关键字()可以声明模板,通过关键字()指定函数模板的类型参数。43.请列出C++中两种用户自定义的数据类型:()、()。44.构造函数的作用是()。45.后置自增运算符“++”重载为类的成员函数(设类名为ClassName)的形式为()。二、单选题1.继承机制的作用是()A)信息隐藏B)数据封装C)定义新类D)数据抽象2.类的析构函数的作用是()A)一般成员函数B)类的初始化C)对象的初始化D)删除对象创建的所有对象3.类的析构函数是在()调用的。A)类创建时B)创建对象时C)删除对象时D)不自动调用4.在()情况下适宜采用inline定义内联函数。B)函数体含有递归语句B)函数体含有递归语句D)函数代码多、不常调用)B)类B的成员即类A的成员C)函数代码少、频繁调用5.如果类A被说明成类B的友元,则(A)类A的成员即类B的成员C)类A的成员函数不得访问类B的成员D)类B不一定是类A的友元6.在类中声明转换函数时不能指定()D)标识符D)不受保护D)静态成员函数A)D)标识符D)不受保护D)静态成员函数7.在公有继承的情况下,基类成员在派生类中的访问权限()A)受限制B)保持不变C)受保护8.在C++类体系中,不能被派生类继承的有()A)转换函数B)构造函数C)虚函数假定ClassN为一个类,则执行“ClassNx;”语句时将自动调用该类的()A)有参构造函数B)无参构造函数C)拷贝构造函数D)赋值构造函数C++语言建立类族是通过()A)类的嵌套B)类的继承C)虚函数D)抽象类重载一元运算符--为类A的成员运算符,若有类A的对象obj,则表达式--obj被C++编译器解释为()。A)--()B)operator--(obj)A)--()B)operator--(obj)以下有四种关于类的说法,其中不正确的是()。A)构造函数可以指定参数,但不能指定函数类型B)一个类可以有多个构造函数C)析构函数不可以指定参数,但可以指定函数类型D)一个类只能有一个析构函数面向对象程序设计讲求封装性,在C++中封装是借助于()实现的。A)结构B)数组C)类D)函数下面有四种关于类的说法,其中不正确的是()。A)一个类可以有多个构造函数A)一个类可以有多个构造函数4.4.一个类只能有一个析构函数D)在一个类中可以说明其它类的对象15.下列有关基类的叙述中不正确的是(),前提为“公有派生”。A)基类的公有成员在派生类中仍然是公有的B)基类的保护成员在派生类中仍然是保护的C)基类的私有成员在派生类中仍然是私有的D)基类的私有成员在派生类中是不可访问的16.以下有四种关于友元的描述,其中错误的是()。A)类A的友元类B的成员函数都是类A的友元函数B)友元函数可以访问该类的私有数据成员C)类与类之间的友元关系可以继承D)友元可以提高程序的运行效率C++的封装性是借助于()实现的。A)函数B)数组C)结构D)类要将一重载为类ClassN的后置友元运算符,那么,要在类中添加的原型说明为()。A)friendClassNoperator--(ClassN&,int);B)friendClassNoperator--(ClassN&);C)friendClassNoperator--(int);D)friendClassNoperator--();在公有派生时,下列描述中不正确的是()。A)派生类的对象可以赋给基类的对象B)派生类对象的地址可以赋给指向基类的指针派生类的对象可以初始化基类的引用当基类的指针指向派生类对象时,通过该指针可以直接访问派生类中的成员以下关于继承成员的访问属性的叙述中,不正确的是()。A)基类的保护成员在私有派生类中是私有的B)对基类成员的访问必须没有二义性C)基类的保护成员在保护派生类中是保护的D)基类的保护成员在派生类中是保护的三、程序改错题(改正下列类中的错误)1.classClassN{private:intnmember;ClassNpmember;public:ClassN();intClassN(intx);}2.voidmain(){charc[]=newchar[20];deletec;}3.classMyClass{private:intn=1;MyClasspO;public:MyClass(inta=0);void~MyClass(inta);};#include<iostream>usingnamespacestd;voidmain(){int&par=newint[6];deletepar;cout>>"主函数End!"<<endl;}5.#include<iostream>usingnamespacestd;voidmain(){long&par=newlong[9];deletepar;cout<<"主函数End!"<<Endl;}6.CLassCN{private:longn;CNpobj;public:CN();voidCN(intX);};四、分析程序输出题1.#include<iostream>usingnamespacestd;classA{public:A(){cout<<"constructingA"<<endl;}~A(){cout<<"destructingA"<<endl;}};classB:publicA{public:B(){cout<<"constructingB"<<endl;}~B(){cout<<"destructingB"<<endl;}};classC:publicB{public:C(){cout<<"constructingC"<<endl;}~C(){cout<<"destructingC"<<endl;}};voidmain(){Cc1;}2.#include<iostream>usingnamespacestd;voidfun(int&a,int&b){intp;p=a;a=b;b=p;}voidexchange(int&a,int&b,int&c){if(a<b)fun(a,b);if(a<c)fun(a,c);if(b<c)fun(b,c);}voidmain(){inta=12,b=89,c=56;exchange(a,b,c);cout<<"a="<<a<<",b="<<b<<",c="<<c<<endl;}3.#include<>classTC{private:intnum;public:TC();intTEST(){returnnum;}~TC();};TC::TC(){num=0;}TC::~TC(){cout<<"Destructorisactive"<<endl;}voidmain(){TCtarr[5];cout<<"Exitingmain"<<endl;}4.#include<>classCBase{private:intn;public:CBase(intm=0){n=m;}virtualvoidprint(){cout<<"InsideCBase"<<n<<endl;}};classCDrive:publicCBase{private:intn;public:CDrive(){n=0;}CDrive(inta,intb):CBase(a),n(b){}voidprint(){cout<<"InsideCDrive"<<n<<endl;}};voidmain(){CBaseb1,b2(99),*pb;CDrivedd(11,22);pb=&b1;pb->print();pb=&b2;pb->print();pb=ⅆpb->print();pb->CBase::print();}5.#include<>classCTest{private:longnum;public:CTest();~CTest();};CTest::CTest(){num=0;}CTest::~CTest(){cout<<"调用析构函数"<<endl;}voidmain()CTestcobj;cout<<"退出主函数"<<endl;}6.#include<>classCN{private:intn;public:CN(inti){n=i;}operatorint(){returnn;}};voidmain(){CNcobj(123);cout<<cobj<<endl;}7.#include<>voidmain(){intnum=100;int&ref=num;cout<<ref<<endl;ref=ref+100;cout<<num<<endl;num=num+100;cout<<ref<<endl;}8.#include<>classCName{private:longnum;public:CName();~CName();};CName::CName(){num=0;}CName::~CName(){cout<<"调用析构函数"<<endl;}voidmain(){CNamecarr[2];cout<<"退出main"<<endl;}9.分析下列程序并写出程序的运行结果。#include<>classCBase{private:intn;public:CBase(intm=0){n=m;}virtualvoidprint(){cout<<"InsideCBase"<<n<<endl;}};classCDrive:publicCBase{private:intn;public:CDrive(){n=0;}CDrive(inta,intb):CBase(a),n(b){}voidprint(){cout<<"InsideCDrive"<<n<<endl;}};voidmain(){CBaseba,bb(100),*pb;CDrivedd(123,456);pb=&ba;pb->print();pb=&bb;pb->print();pb=ⅆpb->print();pb->CBase::print();}10.#include<>classCT{private:intn;public:CT(inti){n=i;}operatorint(){returnn;}};voidmain(){CTcObj(1234);cout<<cObj<<endl;}五、编程题1.下列类成员函数的定义不完整,请在处填代码以使其完整classTC{private:intnum;floatx;public:TC(int,float);TC(TC&);};TC::TC(intn,floatf){num=n;}TC::TC(TC&t){x=;}2.根据下面的主程序,完成类说明的最小形式(不要求实现成员函数的定义)。#include<>classBase{private:;public:;};voidmain(){Basebo(6);}3.—个类的头文件如下所示,程序产生对象tco,且二10,并使用Show()函数输出这个对象的值。ef;}5.在___处填写适当内容,以便完成下列类成员函数的定义。classCN{private:intmn;floatmf;public:CN(int=0,float=0);CN(CN&);};CN::CN(){this->mn=mn;二mf;CN::CN(rObj){mn二;mf二.f;}6.填上合适的字句,使程序的最终结果为200。#include<>classCNumber{private:intval;public:CNumber(inti){val=i;}int();};CNumber::operatorint(){}classnum:publicCNumber{public:num(inti):CNumber(i){}};voidmain(){numn(100);inti=n;cout<<i+n<<endl;}7.下面是一个类的测试程序,设计出能使用如下测试程序的类voidmain(){Testto;(300,200);();}输出结果:300-200=100已知复数类Complex的声明如下:classComplex{public:Complex();Complex(double);Complex(double,double);friendComplexoperator+(Complex&,Complex&);friendostream&operator<<(ostream&,Complex&);friendistream&operator>>(istream&,Complex&);private:doublereal,imag;};要求:(1)写出该类的所有构造函数的类外定义代码。(2)写出对运算符“+”、“<<”、“>>”进行重载的运算符重载函数的定义。下列AbstractC类是一个表示形状的抽象类,area()为求图形面积的函数,total()则是一个通用的用以求不同形状的图形面积总和的函数。classAbstractC{public:virtualdoublearea()=0;};doubletotal(AbstractC*sa[],intn){doubles=;for(inti=0;i<n;i++)s+=sa[i]->area();returns;}要求:从AbstractC类派生圆类(Circle)、正方形类(Square),圆类新增数据成员半径(r),正方形类新增数据成员边长(a),圆类和正方形类都有构造函数,修改、显示数据成员值的函数,求面积函数。写出main()函数,计算半径为的圆和边长为的正方形的面积和(必须通过调用total函数计算)。10.一个类的头文件的内容如下所示://#include<>classCN{private:intn;public:CN(int);voidPrint();};CN::CN(intN){n=N;}voidCN::Print(){cout<<n<<endl;}编写一个主程序,产生对象Obj,且使Obj对象中的n成员的值为100,并使用Print()函数输出这个对象中私有成员n的值。在主程序中,创建一动态对象,使该动态对象的数据成员值为2015,并使用指针pObj指向该动态对象,然后输出该动态对象的数据成员的值。11.一个类的头文件的内容如下所示://#include<iostream>usingnamespacestd;classCT{private:intm;public:CT(int);voidShowM();};CT::CT(intn){m=n;}voidCT::ShowM(){cout<<m<<endl;}编写一个主程序,产生对象mObj,且使mObj对象中的m成员的值为11,并使用ShowM()函数输出这个对象中私有成员m的值。在主程序中,创建一动态对象,使该动态对象的数据成员值为126,并使用指针pObj指向该动态对象,然后输出该动态对象的数据成员的值。12.使用运行时多态性编程实现三角形、矩形和圆的总面积的统计并输出结果。三角形、矩形和圆类的类名分别为T、R和C。T类必须以S类作基类,R类必须从T类派生,C类必须以S作基类。Shape类的定义如下:classS{private:intx,y;public:S(inta=0,intb=0):x(a),y(b){}virtualintArea()=0;};不必建立工程,将所有代码都放在一个源文件中。在主函数中,必须调用下列Sum函数来统计各类图形面积的总和。intSum(S*s[],intn){intsum=0;for(inti=0;i<n;i++)sum+=s[i]->Area();returnsum;参考答案一、填空题1.继承性2.成员3.virtual4.virtual5.成员6.友元7.const8.const9.调用类成员函数的10.ClassName(ClassName&);11.私有公有保护私有12.虚基类构造13.static14.415.函数重载虚函数16.函数重载虚函数17.class18.template19.320.try-catch21.privatepublicprotectedprivate22.异常23.inline24.friend25.虚基类26.原型声明27.const28.基类指针对象29.virtualdoublevirfun()=0;30.static31.原型32.ClassN(ClassN&);33.纯虚函数对象指针34.operator<<35.const36.抽象实例37.publicprotectedprivateprivate38.virtual39.friendvoidmyfun();40.静态数据成员静态成员函数41.结合性优先级templatetypename或classclassstruct初始化对象中的数据成员等ClassNameoperator++(int);二、单选题1~5:CDCCD6~10:ABBBB11~15:ACCBC16~20:CDADD三、程序改错题(改正下列类中的错误)1.“ClassNpmember;”“ClassN*pmember;”“intClassN(intx);”“ClassN(intx);”“}”“};”2.“charc[]二newchar[20];”“char*c二newchar[20];”“deletec;”“delete[]c;”3.“intn=1;”“intn;”“MyClassp0;”“MyClass*p0;”“void~MyClass(inta);”“~MyClass();”4.“int&par二newint[6];”“int*par二newint[6];”“deletepar;”“delete[]par;”“cout>>"主函数End!"<<endl;”“cout<<"主函数End!"<<endl;5.“long&par二newlong[9];”“long*par二newlong[9];”“deletepar;”“delete[]par;”“cout<<"主函数End!"<<Endl;”“cout<<"主函数End!"<<endl;6.“CNpobj;”“CN*pobj;”“voidCN(intX);”“CN(intX);”四、分析程序输出题1.construetingAconstruetingBconstruetingCdestruetingCdestruetingBdestruetingA2.a=89,b=56,c=123.ExitingmainDestructorisactiveDestructorisactiveDestructorisactiveDestructorisactiveDestructorisactive4.InsideCBase0InsideCBase99InsideCDrive22InsideCBase115.退出主函数调用析构函数6.1237.1002003008.退出main调用析构函数调用析构函数9.InsideCBase0InsideCBase100InsideCDrive456InsideCBase12310.1234五、编程题1.x=fnum=2.intnBase(intm)3.TCNtco(10)()4.inta,floatbmefCTN&rObj5.rObjintmn,floatmfthis->mfCN&6.rObjoperatorreturnval7.classTest{private:intx,y;public:voidInit(inta,intb){x=a;y=b;}voidPrint(){cout<<x<<"-"<<y<<"="<<x-y<<endl;}};8.Complex::Complex(){real=0;imag=0;}Complex::Complex(doubler){real=r;}Complex::Complex(doubler,doublei){real=r;imag=i;}Complexoperator+(Complex&c1,Complex&c2){Complexc;=+;=+;returnc;}ostream&operator<<(ostream&output,Complex&c){output<<"("<<<<"+"<<<<"i)"<<endl;returnoutput;}istream&operator>>(istream&input,Complex&c){cout<<"inputrealandimaginarypartofcomplexnumber:input>>>>;returninput;}9.#include<iostream>usingnamespacestd;classAbstractC{public:virtualdoublearea()=0;};doubletotal(AbstractC*sa[],intn){doubles=;for(inti=0;i<n;i++)s+=sa[i]->area();returns;}classCircle:publicAbstractC{private:doubler;public:Circle(doubleR={r=R;}

温馨提示

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

评论

0/150

提交评论