《C++程序设计练习题与答案(1)(17页).doc》由会员分享,可在线阅读,更多相关《C++程序设计练习题与答案(1)(17页).doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-C+程序设计练习题与答案(1)-第 17 页C+程序设计练习题一、填空题1对象的三大基本特性分别为多态性、( )、封装性。2赋值运算符应重载为( )函数。3用( )声明的基类称为虚基类。4用( )声明的函数称为虚函数。5派生类对基类继承控制访问有三种。派生类可以定义其基类中不具备的( )。6静态成员是对象的成员,( )函数不是类的成员。7在函数体之前加( )关键字可以防止覆盖函数改变数据成员的值。8一个const对象只能访问( )成员函数。9使用友元函数是为了提高程序效率,且节约了( )开销。10类名为“ClassName”的类,其拷贝构造函数的原型说明是( )。11由关键字private、
2、public和protected限定成员的访问权限分别是( )、( )和( )。缺省关键字时成员的访问权限为( )。12如果想要公共基类在派生类中只有一个拷贝,就要将公共的基类说明为( );如果虚基类没有默认构造函数,就必须在每一个派生类的构造函数中都要调用虚基类的( )函数。13静态成员函数是使用关键字( )说明的成员函数。14一个函数的原型声明为“void FunName(int=0, double=0, char=x);”,则调用FunName函数的方法共有( )种。15编译时多态性是通过( )实现的;运行时多态性是通过( )实现的。16C+通过( )实现编译时多态性,通过( )实现运行
3、时多态性。17在C+中,声明类的关键字是( )。18声明C+模板的关键字是( )。19调用函数原型声明为“void FunName(short, int=0, float=1.0);”的方法有( )种。20处理C+异常的方法:采用( )结构。21用关键字( )、( )和( )限定的成员,其访问权限分别为:公有的、私有的和保护的。缺省关键字时,成员的访问权限为( )。22在C+中,处理( )的方法是采用try-catch结构。23在C+中,用关键字( )说明内置函数。24在C+中,声明友元函数的关键字是( )。25将公共基类说明为( )时,多重派生过程中公共基类在派生类中就只有一个拷贝了。26在
4、C+中,如果函数调用在前、定义在后,就必须先对函数进行( )。27在成员函数头之后、函数体之前加( )修饰的成员函数称为类的常成员函数。28包含纯虚函数的类称为抽象类,这种类只能用作( )来派生新类。由于抽象类的特殊性,我们可以说明抽象类的( ),但不能说明抽象类的( )。29说明函数类型为“double”、函数名为“virfun”且无参数的纯虚函数的表达形式为( )。30说明静态成员要使用关键字( )。31当函数调用在前定义在后时,必须先对函数进行( )说明。32类名为“ClassN”的类的拷贝构造函数的函数原型说明为( )。33抽象类是包含( )的类,必须注意:不能说明抽象类的( ),但可
5、说明抽象类的( )。34流插入运算符只能重载为友元函数,重载流插入运算符的函数名为( )。35要防止在该成员函数中改变数据成员的值,就要在类的成员函数名之后、函数体之前加上关键字( )。36类和对象的关系可表述为:类是对象的( ),而对象则是类的( )。37在C+中,三种继承方式的说明符号为( )、( )和( ),如果不加说明,则默认的继承方式为( )。38如果只想保留公共基类的一个复制,就必须使用关键字( )把这个公共基类声明为虚基类。39若要把void myfun( )定义为类A的友元函数,则应在类A的声明中加入语句( )。40类的静态成员分为( )和( )。41运算符重载要求保持其原来的
6、操作数个数、( )、( )和语法结构。42通过关键字( )可以声明模板,通过关键字( )指定函数模板的类型参数。43请列出C+中两种用户自定义的数据类型:( )、( )。44构造函数的作用是( )。45后置自增运算符“+”重载为类的成员函数(设类名为ClassName)的形式为( )。二、单选题1继承机制的作用是( )A) 信息隐藏B) 数据封装C) 定义新类D) 数据抽象2类的析构函数的作用是( )A) 一般成员函数B) 类的初始化C) 对象的初始化D) 删除对象创建的所有对象3类的析构函数是在( )调用的。A) 类创建时B) 创建对象时C) 删除对象时D) 不自动调用4在( )情况下适宜采
7、用inline定义内联函数。A) 函数体含有循环语句B) 函数体含有递归语句C) 函数代码少、频繁调用D) 函数代码多、不常调用5如果类A被说明成类B的友元,则( )A) 类A的成员即类B的成员B) 类B的成员即类A的成员C) 类A的成员函数不得访问类B的成员D) 类B不一定是类A的友元6在类中声明转换函数时不能指定( )A) 参数B) 访问权限C) 操作D) 标识符7在公有继承的情况下,基类成员在派生类中的访问权限( )A) 受限制B) 保持不变C) 受保护D) 不受保护8在C+类体系中,不能被派生类继承的有( )A) 转换函数B) 构造函数C) 虚函数D) 静态成员函数9假定ClassN为
8、一个类,则执行“ClassN x;”语句时将自动调用该类的( )A) 有参构造函数B) 无参构造函数C) 拷贝构造函数D) 赋值构造函数10C+语言建立类族是通过( )A) 类的嵌套B) 类的继承C) 虚函数D) 抽象类11重载一元运算符-为类A的成员运算符,若有类A的对象obj,则表达式-obj被C+编译器解释为( )。A) obj.operator - ( )B) operator - (obj)C) obj:operator - ( )D) obj:operator - ( )12以下有四种关于类的说法,其中不正确的是( )。A) 构造函数可以指定参数,但不能指定函数类型B) 一个类可以
9、有多个构造函数C) 析构函数不可以指定参数,但可以指定函数类型D) 一个类只能有一个析构函数13面向对象程序设计讲求封装性,在C+中封装是借助于( )实现的。A) 结构B) 数组C) 类D) 函数14下面有四种关于类的说法,其中不正确的是( )。A) 一个类可以有多个构造函数B) 析构函数不可以指定函数类型,但可以指定函数参数C) 一个类只能有一个析构函数D) 在一个类中可以说明其它类的对象15下列有关基类的叙述中不正确的是( ),前提为“公有派生”。A) 基类的公有成员在派生类中仍然是公有的B) 基类的保护成员在派生类中仍然是保护的C) 基类的私有成员在派生类中仍然是私有的D) 基类的私有成
10、员在派生类中是不可访问的16以下有四种关于友元的描述,其中错误的是( )。A) 类A的友元类B的成员函数都是类A的友元函数B) 友元函数可以访问该类的私有数据成员C) 类与类之间的友元关系可以继承D) 友元可以提高程序的运行效率17C+的封装性是借助于( )实现的。A) 函数B) 数组C) 结构D) 类18要将-重载为类ClassN的后置友元运算符,那么,要在类中添加的原型说明为( )。A) friend ClassN operator - (ClassN &, int);B) friend ClassN operator - (ClassN &);C) friend ClassN opera
11、tor - (int);D) friend ClassN operator - ( );19在公有派生时,下列描述中不正确的是( )。A) 派生类的对象可以赋给基类的对象B) 派生类对象的地址可以赋给指向基类的指针C) 派生类的对象可以初始化基类的引用D) 当基类的指针指向派生类对象时,通过该指针可以直接访问派生类中的成员20以下关于继承成员的访问属性的叙述中,不正确的是( )。A) 基类的保护成员在私有派生类中是私有的B) 对基类成员的访问必须没有二义性C) 基类的保护成员在保护派生类中是保护的D) 基类的保护成员在派生类中是保护的三、程序改错题(改正下列类中的错误)1class Class
12、Nprivate:int nmember;ClassN pmember;public:ClassN( );int ClassN(int x);2void main() char c = new char 20; delete c;3class MyClassprivate:int n=1; MyClass pO;public:MyClass(int a = 0);void MyClass(int a);4#include using namespace std;void main() int & par = new int 6; delete par; cout 主函数End! endl;5#
13、include using namespace std;void main() long & par = new long 9; delete par; cout 主函数End! Endl;6CLass CNprivate:long n;CN pobj; public:CN();void CN(int X);四、分析程序输出题1#include using namespace std;class Apublic: A() coutconstructing A endl; A() coutdestructing A endl; class B: public Apublic: B() coutc
14、onstructing B endl; B() coutdestructing B endl; class C : public Bpublic: C() coutconstructing C endl; C() coutdestructing C endl; void main() C c1; 2#include using namespace std;void fun(int &a, int &b) int p; p=a; a=b; b=p;void exchange(int &a,int &b,int &c) if(ab) fun(a,b); if(ac) fun(a,c); if(bc
15、) fun(b,c);void main() int a=12,b=89,c=56; exchange(a,b,c); couta=a,b=b ,c=cendl;3#include class TC private: int num;public: TC(); int TEST() return num; TC();TC:TC() num=0; TC:TC() coutDestructor is activeendl; void main() TC tarr5; coutExiting mainendl;4#include class CBaseprivate: int n;public: C
16、Base(int m = 0) n = m; virtual void print( ) cout Inside CBase n endl; class CDrive: public CBaseprivate: int n;public: CDrive( ) n = 0; CDrive(int a, int b) : CBase(a) , n(b) void print( ) cout Inside CDrive n print( ); pb = &b2; pb-print( ); pb = ⅆ pb-print( ); pb-CBase:print();5#include class
17、CTestprivate: long num;public: CTest( ); CTest( );CTest:CTest( ) num = 0; CTest:CTest( ) cout 调用析构函数 endl; void main( ) CTest cobj; cout 退出主函数 endl;6#include class CNprivate: int n;public: CN(int i) n=i; operator int() return n; void main() CN cobj(123); coutcobjendl;7#include void main( ) int num =
18、 100; int & ref = num; cout ref endl; ref = ref + 100; cout num endl; num = num + 100; cout ref endl;8#include class CNameprivate: long num;public: CName( ); CName( );CName:CName( ) num = 0; CName:CName( ) cout 调用析构函数 endl; void main( ) CName carr2; cout 退出main endl;9分析下列程序并写出程序的运行结果。#include class
19、CBaseprivate: int n;public: CBase(int m = 0) n = m; virtual void print( ) cout Inside CBase n endl; class CDrive: public CBaseprivate: int n;public: CDrive( ) n = 0; CDrive(int a, int b) : CBase(a) , n(b) void print( ) cout Inside CDrive n print( ); pb = &bb; pb-print( ); pb = ⅆ pb-print( ); pb-C
20、Base:print();10#include class CTprivate: int n;public: CT(int i) n=i; operator int() return n; void main() CT cObj(1234); coutcObjendl;五、编程题1下列类成员函数的定义不完整,请在_处填代码以使其完整。class TC private: int num; float x;public: TC(int, float); TC(TC&);TC:TC(int n, float f) num = n; _;TC:TC(TC& t) _; x = t.x;2根据下面的主程
21、序,完成类说明的最小形式(不要求实现成员函数的定义)。#include class Base private: _;public: _;void main() Base bo(6); 3一个类的头文件如下所示,程序产生对象tco,且tco.num=10,并使用Show( )函数输出这个对象的值。/tcn.hclass TCN private: int num;public: TCN(int n) num=n; void Show () coutnumendl; #include#include tcn.hvoid main() _; _;4完成下面类中的成员函数的定义(在_处填写适当的内容)。
22、class CTNprivate: int men; float mef;public: CTN(int, float); CTN(CTN &);CTN:CTN( ) men = a; = b;CTN:CTN( rObj ) men = ; mef = .mef;5在_处填写适当内容,以便完成下列类成员函数的定义。class CNprivate: int mn; float mf;public: CN(int = 0, float = 0); CN(CN &);CN:CN( ) this-mn = mn; = mf;CN:CN( rObj ) mn = ; mf = .f;6填上合适的字句,使
23、程序的最终结果为200。#include class CNumberprivate: int val;public: CNumber(int i) val=i; _int( );CNumber:operator int() _ class num : public CNumber public: num(int i) : CNumber(i) void main() num n(100); int i=n; couti+nendl;7下面是一个类的测试程序,设计出能使用如下测试程序的类:void main() Test to; to.Init(300, 200); to.Print();输出结
24、果:300-200=1008已知复数类Complex的声明如下:class Complexpublic: Complex(); Complex(double); Complex(double, double); friend Complex operator + (Complex &, Complex &); friend ostream & operator (istream &, Complex &);private: double real, imag;要求:(1)写出该类的所有构造函数的类外定义代码。(2)写出对运算符“+”、“”进行重载的运算符重载函数的定义。9下列AbstractC
25、类是一个表示形状的抽象类,area( )为求图形面积的函数,total( )则是一个通用的用以求不同形状的图形面积总和的函数。class AbstractCpublic: virtual double area()=0;double total(AbstractC *sa , int n) double s=0.0; for(int i=0; iarea( ); return s;要求:(1)从AbstractC类派生圆类(Circle)、正方形类(Square),圆类新增数据成员半径(r),正方形类新增数据成员边长(a) ,圆类和正方形类都有构造函数,修改、显示数据成员值的函数,求面积函数。
26、(2)写出main( )函数,计算半径为3.5的圆和边长为7.9的正方形的面积和(必须通过调用total函数计算)。10一个类的头文件cn.h的内容如下所示:/cn.h#include class CNprivate: int n;public: CN(int); void Print();CN:CN(int N) n = N; void CN:Print() coutnendl; (1) 编写一个主程序,产生对象Obj,且使Obj对象中的n成员的值为100,并使用Print()函数输出这个对象中私有成员n的值。(2) 在主程序中,创建一动态对象,使该动态对象的数据成员值为2015,并使用指针
27、pObj指向该动态对象,然后输出该动态对象的数据成员的值。11一个类的头文件CT.h的内容如下所示:/CT.h#include using namespace std;class CTprivate: int m;public: CT(int); void ShowM();CT:CT(int n) m = n; void CT:ShowM() coutmendl; (1) 编写一个主程序,产生对象mObj,且使mObj对象中的m成员的值为11,并使用ShowM()函数输出这个对象中私有成员m的值。(2) 在主程序中,创建一动态对象,使该动态对象的数据成员值为126,并使用指针pObj指向该动态
28、对象,然后输出该动态对象的数据成员的值。12使用运行时多态性编程实现三角形、矩形和圆的总面积的统计并输出结果。三角形、矩形和圆类的类名分别为T、R和C。T类必须以S类作基类,R类必须从T类派生,C类必须以S作基类。Shape类的定义如下:class Sprivate: int x, y;public: S(int a=0, int b=0) : x(a) , y(b) virtual int Area() = 0;不必建立工程,将所有代码都放在一个源文件中。在主函数中,必须调用下列Sum函数来统计各类图形面积的总和。int Sum( S * s, int n) int sum = 0; for
29、(int i = 0; i Area(); return sum;参考答案一、填空题1继承性2成员3virtual4virtual5成员6友元7const8const9 调用类成员函数的10 ClassName(ClassName &);11私有 公有 保护 私有12虚基类 构造13static14415函数重载 虚函数16函数重载 虚函数17class18template19320 try-catch21private public protected private22异常23inline24friend25虚基类26原型声明27const28基类 指针 对象29virtual doubl
30、e virfun( )=0;30static31原型32 ClassN(ClassN &);33纯虚函数 对象 指针34operator 主函数End! endl;”“cout 主函数End! endl;”5“long & par = new long 9;”“long * par = new long 9;”“delete par;”“delete par;”“cout 主函数End! Endl;”“cout 主函数End! mf CN & rObj.n rObj6operator return val7class Testprivate: int x,y;public: void Init
31、(int a, int b) x=a; y=b; void Print( ) coutx-y=x-yendl; 8Complex:Complex() real = 0; imag = 0;Complex:Complex(double r) real = r; Complex:Complex(double r,double i) real = r; imag = i; Complex operator + (Complex & c1, Complex & c2) Complex c; c.real = c1.real + c2.real; c.imag = c1.imag + c2.imag;
32、return c;ostream& operator (ostream& output,Complex& c) output ( c.real + c.imag i) (istream& input, Complex& c) cout c.real c.imag; return input;9#include using namespace std;class AbstractCpublic: virtual double area() = 0;double total(AbstractC *sa, int n) double s=0.0; for(int i=0; iarea( ); return s;class Circle : public AbstractCprivate: double r;public: Circle(double R = 0.0) r = R; void SetR(double R) r = R; void ShowR() cout r = r endl; double area() return 3.1415926*r*r; class Square : public AbstractCprivate: double a;public: Square(double A = 0.0) a = A; void SetR(double