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

下载本文档

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

文档简介

1、c+序设计练习题、填空题1对象的三大基本特性分别为多态性、 () 、封装性。2赋值运算符应重载为() 函数。3用()声明的基类称为虚基类。4用()声明的函数称为虚函数。5派生类对基类继承控制访问有三种。派生类可以定义其基类中不具备的()。6静态成员是对象的成员,()函数不是类的成员。7在函数体之前加()关键字可以防止覆盖函数改变数据成员的值。8一个const 对象只能访问 ()成员函数。9使用友元函数是为了提高程序效率,且节约了()开销。10.类名为“ classname的类,其拷贝构造函数的原型说明是()。)、 ()和()。缺省11由关键字private、 public 和 protecte

2、d 限定成员的访问权限分别是(关键字时成员的访问权限为()。12 如果想要公共基类在派生类中只有一个拷贝,就要将公共的基类说明为();如果虚基类没有默认构造函数,就必须在每一个派生类的构造函数中都要调用虚基类的 () 函数。13静态成员函数是使用关键字()说明的成员函数。14 一个函数的原型声明为“ void funname(int=0, double=0, char=x); ” ,则调用 funname 函数的方法 共有 () 种。15编译时多态性是通过()实现的;运行时多态性是通过()实现的。16 c+ 通过 ()实现编译时多态性,通过()实现运行时多态性。17 在 c+ 中,声明类的关键

3、字是()。18 声明 c+ 模板的关键字是() 。19 调用函数原型声明为“ void funname(short, int=0, float=1.0); ”的方法有()种。20 处理c+ 异常的方法:采用 () 结构。21用关键字()、 ()和()限定的成员,其访问权限分别为:公有的、私有的和保护的。缺省关键字时,成员的访问权限为()。22 在c+ 中,处理 ()的方法是采用 try-catch 结构。23 在c+ 中,用关键字()说明内置函数。24 在c+ 中,声明友元函数的关键字是()。25将公共基类说明为()时,多重派生过程中公共基类在派生类中就只有一个拷贝了。26在c+ 中,如果函数

4、调用在前、定义在后,就必须先对函数进行()。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) 数据封装2类的析构函数的作用是()a) 一般成员函数b) 类的初始化3类的析构函数是在()调用的。a) 类创建时b) 创建对象时c) 定义新类d) 数据抽象c) 对象的初始化d) 删除对象创建的所有对象c) 删除对象时d) 不自动调用精选范本46 在(

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) 构造函数

8、c) 虚函数d) 静态成员函数9 .假定classn为一个类,则执行“ classn x;”语句时将自动调用该类的()a) 有参构造函数b) 无参构造函数c) 拷贝构造函数d) 赋值构造函数10 c+ 语言建立类族是通过 ()a) 类的嵌套 b) 类的继承c) 虚函数d) 抽象类11 重载一元运算符- 为类 a 的成员运算符,若有类 a 的对象 obj ,则表达式-obj 被 c+ 编译器解释为 ()。a) obj.operator - ( ) b) operator - (obj) c) obj:operator - ( ) d) obj:operator - ( )12 以下有四种关于类的

9、说法,其中不正确的是()。a) 构造函数可以指定参数,但不能指定函数类型b) 一个类可以有多个构造函数c) 析构函数不可以指定参数,但可以指定函数类型d) 一个类只能有一个析构函数13 面向对象程序设计讲求封装性,在c+ 中封装是借助于()实现的。a) 结构 b) 数组c) 类d) 函数14 下面有四种关于类的说法,其中不正确的是()。a) 一个类可以有多个构造函数b) 析构函数不可以指定函数类型,但可以指定函数参数c) 一个类只能有一个析构函数d) 在一个类中可以说明其它类的对象15下列有关基类的叙述中不正确的是() ,前提为“公有派生” 。a) 基类的公有成员在派生类中仍然是公有的b) 基

10、类的保护成员在派生类中仍然是保护的c) 基类的私有成员在派生类中仍然是私有的d) 基类的私有成员在派生类中是不可访问的16以下有四种关于友元的描述,其中错误的是()。a) 类 a 的友元类 b 的成员函数都是类a 的友元函数b) 友元函数可以访问该类的私有数据成员c) 类与类之间的友元关系可以继承d) 友元可以提高程序的运行效率17 c+ 的封装性是借助于()实现的。a) 函数 b) 数组c) 结构d) 类18 要将-重载为类classn 的后置友元运算符,那么,要在类中添加的原型说明为 ()。a) friend classn operator - (classn &, int);b) fri

11、end classn operator - (classn &);d) friend classn operator - ( );()。b) 派生类对象的地址可以赋给指向基类的指针c) friend classn operator - (int);19 在公有派生时,下列描述中不正确的是a) 派生类的对象可以赋给基类的对象c) 派生类的对象可以初始化基类的引用d) 当基类的指针指向派生类对象时,通过该指针可以直接访问派生类中的成员20以下关于继承成员的访问属性的叙述中,不正确的是()。a) 基类的保护成员在私有派生类中是私有的b) 对基类成员的访问必须没有二义性c) 基类的保护成员在保护派生类

12、中是保护的d) 基类的保护成员在派生类中是保护的三、程序改错题 (改正下列类中的错误)1class classnprivate: 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()

13、int & par = new int 6;delete par;cout 主函数 end! endl;5#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);四、分析程序输出题7#include using namespace std;class apublic:a() coutconstructing a endl; a() coutde

14、structing a endl;class b: public apublic:b() coutconstructing b endl; b() coutdestructing b endl; ;class c : public bpublic:c() coutconstructing c endl;c() coutdestructing c endl;void main() c c1;8#include using namespace std;void fun(int &a, int &b)int p; p=a; a=b; b=p;void exchange(int &a,int &b,i

15、nt &c)if(ab) fun(a,b);if(ac) fun(a,c);if(bc) fun(b,c);void main()int a=12,b=89,c=56;exchange(a,b,c);couta=a,b=b ,c=cendl;9#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;10#include

16、 class 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 = &b2;pb-print( );pb = ⅆpb-print( );pb

17、-cbase:print();11#include class ctestprivate:long num;public:ctest( );ctest( );ctest:ctest( ) num = 0;ctest:ctest( ) cout 调用析构函数 endl; void main( )ctest cobj;cout 退出主函数 endl;12#include 精选范本class cnprivate: int n;public: cn(int i) n=i; operator int() return n; ;void main()cn cobj(123);coutcobjendl;13

18、#include void main( )int num = 100;int & ref = num;cout ref endl;ref = ref + 100;cout num endl;num = num + 100;cout ref endl;14#include class cnameprivate: long num;public: cname( );cname( );cname:cname( ) num = 0;cname:cname( ) cout 调用析构函数 endl; void main( )cname carr2;cout 退出 main endl;9分析下列程序并写出程

19、序的运行结果。#include class 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 = &dd

20、;pb-print( );pb-cbase: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;

21、2根据下面的主程序,完成类说明的最小形式(不要求实现成员函数的定义)。#include class baseprivate: ;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();输出结果:300-200=1008

24、 .已知复数类 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) ,圆类和正方形类都有构造函数,修改、显示数据成员值的函数,求面积函数。(2)写出 main( )

26、函数,计算半径为 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,并使用指针pobj

27、 指向该动态对象,然后输出该动态对象的数据成员的值。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

29、;for(int i = 0; i area();return sum;精选范本参考答案一、填空题1 继承性2成员3 virtual4 virtual5成员6友元7 const8 const9 调用类成员函数的10 classname(classname &);11 私有 公有 保护 私有12 虚基类构造13 static14 415 函数重载虚函数16 函数重载虚函数17 class18 template19 320 try-catch21 private public protected private22异常23 inline24 friend25虚基类26原型声明27 const28

30、基类指针 对象29 virtual double virfun( )=0;30 static31 原型32 classn(classn &);33 纯虚函数对象 指针34 operator 主函数 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

31、: int x,y;public: void init(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 =

32、c1.imag + c2.imag;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 sho

温馨提示

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

评论

0/150

提交评论