面向对象程序设计复习试题(答案).doc_第1页
面向对象程序设计复习试题(答案).doc_第2页
面向对象程序设计复习试题(答案).doc_第3页
面向对象程序设计复习试题(答案).doc_第4页
面向对象程序设计复习试题(答案).doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

语法扩充1.1选择题在c+中用( d )能够实现将参数值带回。a)数组 b)指针 c)引用 d)上述abc都可考虑函数原型void test(int a,int b=7,char *ch=*),下面的函数调用中,属于不合法调用的是:( c )a)test(5) b)test(5,8) c)test(6,#) d)test(0,0,*);已知: int m=10;下列表示引用的方法中,正确的是:( c )a)int &z; b)int &t=10; c)int &x=m; d)float &f=&m;下列不是函数重载所要求的条件是:( d )a)函数名相同 b)参数个数不同 c)参数类型不同 d)函数返回值类型不同在c+中执行以下4条语句后输出rad值为:( c )static int hot=200;int &rad=hot;hot=hot+100;coutradstr;当输入microsoft visual studio 6.0!所得结果是str=(b)。a、 microsoft visual studio 6.0!b、 microsoftc、 microsoft visual d、 microsoft visual studio 6.0.函数模板(c)。a、代表某一具体函数b、与模板函数是同一个函数c、与某一个具体的数据类型连用d、是模板函数实例化的结果在c+中,关于下列设置参数默认值的描述中,正确的是(c)a、不允许设置参数的默认值b、设置参数默认值只能在定义函数时设置c、设置参数默认值时,应该是先设置右边的再设置左边的d、设置参数默认值时,应该全部参数都设置下列表示引用的方法中,(a)是正确的。已知: k=1000; a、int &x=k; b、char &y;c、int &z=1000; d、float &t=&k;有如下模板定义:template t fun(t x,t y)return x*x+y*y;在下列对fun的调用中,错误的是:( c )a)fun(2,8) b)fun(2.0,8.2) c)fun(2.3,8) d)fun (2,8)通常情况下,函数模板中的类型参数个数不能是( a )a)0个 b)1个 c)2个 d)3个1.2填空题1、 假定有如下定义:int x;,若要将整型变量y定义为变量x的引用,则应使用的定义语句是_int &y=x;_。具有相同函数名但具有不同参数表的函数称为 重载函数。 2、 在进行函数调用时,将把参数的值传递给值参数,把参数的_地址_传递给引用参数。 3、 执行完下列三条语句后,指针变量c指向_b_。int a,b,*c=&a;int *&p=c;p=&b; 4、 假设有如下函数定义:void fun(int x,int y=100);则语旬fun(5)语句_ fun(5,100)_等价。 5、 在一个c+程序中,每个变量都必须遵循_先定义后使用_的原则。 6、 下面是一个求数组元素之和的程序。主程序中定义并初始化了一个数组,然后计算该数组各元素之和,并输出结果。函数totalsum 计算数组元素之和。请完成下列程序。#include _ inttotalsum(intarray,intlen)_ ;void main()int a5=2,3,6,8,10;_int total _;total =totalsum(a,5);coutsum of array:totalendl;int totalsum(int array,int len)_int sum =0_ ;for(int i=0;_ilen_ ;i+)_ sum += arrayi_ ;return sum; 7、 下面的函数fun未使用中间变量实现了对两个数的交换,请完成下列函数的定义。void fun (int &x,int &y)x+ = y;y =_x-y_ ;_x = x - y_ ; 8、 定义一个函数时,若只允许函数体访问形参的值而不允许修改它的值,则应把该形参声明为_常量_,即在该形参声明的前面加上_const_关键字进行修饰。 9、 在一个函数的定义或声明前加上关键字_inline_时,该函数就声明为内联函数。 1.3简答题a、.内联函数的含义在函数前加上关键字inline说明了一个内联函数,这使一个函数在程序行里进行代码扩展而不被调用。这样的好处是减少了函数调用的开销,产生较快的执行速度。但是由于重复编码会产生较长代码,所以内联函数通常都非常小。如果一个函数在类说明中定义,则将自动转换成内联函数而无需用inline说明。b、.函数重载的含义在同一作用域范围内,相同的函数名通过不同的参数类型或参数个数可以定义几个函数,编译时编译器能够识别实参的个数和类型来决定该调用哪个具体函数。需要注意的是,如果两个函数仅仅返回类型不同,则编译时将会出错,因为返回类型不足以提供足够的信息以使编译程序判断该使用哪个函数。所以函数重载时必须是参数类型或者数量不同。c、引用与指针的区别d、内联函数使用上的限制e、定义带默认参数值函数的规则f、指针与常量的关系1.4程序阅读题1)写出下列程序的运行结果。#include void main()int x;int &p=x;x=10;p=x+10;coutx,pendl;结果:20,202)写出下列程序的运行结果。#include int f(int a)return +a;int g(int &a)return +a;void main()int m=0,n=0;m+=f(g(m);n+=f(f(n);coutm=mendl;coutn=nendl;结果:m=3n=23) 写出下列程序的运行结果。#include void fun()int num=20;coutthe funs num isnumendl;void main()int num=10;coutthe mains num is numendl;fun();int num=30;coutthe fields num is numendl;coutthe mains num is num静态成员函数没有( b )。a返回值 b. this指针 c. 指针参数 d. 返回类型在下列关键字中,用于说明类中公有成员的是( a )。apublic; bprivate; cprotected; dfriend不是构造函数的特征( d )。a构造函数的函数名与类名相同; b. 构造函数可以重载;c. 构造函数可以设置缺省参数; d. 构造函数必须指定类型说明。是析构函数的特征( a )。a一个类中只能定义一个析构函数; b. 析构函数名与类名不同;c. 析构函数的定义只能在类体内; d. 析构函数可以有一个或多个参数。关于成员函数特征的下述描述中,( a )是错误的。a成员函数一定是内联函数; b. 成员函数可以重载;c. 成员函数可以设置参数的缺省值; d. 成员函数可以是静态的。下述静态数据成员的特性中,( d )是错误的。a 说明静态数据成员时前边要加修饰符static;b 静态数据成员要在类体外进行初始化;c引用静态数据成员时,要在静态数据成员名前加和作用域运算符;d静态数据成员不是所有对象所共用的。2.2填空题1、 在撤销类的对象时,c+程序将自动调用该对象的_析构_函数。 2、 类中的构造函数是一个特殊的成员函数,它由类的对象_自动_调用,它的作用是_为对象分配内存,数据成员初始化_。 3、 对类中的成员函数和属性的访问是通过_public_、_protected_和_private_这3个关键字来控制的。 4、 _delete_运算符删除new运算符所动态分配的内存空间。 5、 假定用户没有给一个名为myclass的类定义析构函数,则系统为其定义的默认析构函数形式为_myclass()_。 6、 类中构造函数有_一个或多_个,析构函数有_一_个。 7、 类是对具有共同属性和行为的一类事物的抽象描述,共同属性被描述为类中的_数据成员_ ,共同行为被描述为类中的_成员函数_。 8、 若要把类friendclass定义为类myclass的友元类,则应在类myclass的定义中加入语句_friend class friendclass;_。 9、 在结构定义中,数据和成员函数默认权限是_public_。在类定义中,数据和成员函数默认权限是_private_。 10、 在下面程序的横线处填上适当的语句,使类型该程序执行结果为10。#include class myclasspub1ic:_ myclass ( int a ) _x = a; _/为x置值_int getnum() return x; _ /取x值private:int x; ;void main()myclass my(10);coutmy.getnum()end; 11、 完成下面的类定义。class myclasspublic:myclass()x=0;_friend_int getnum(_myclass _my);private:int x; ;int getnum(_myclass _my)_return my.x; 12、 _new_运算符对指定类型对象动态分配内存并返回该类型的_指针_。 13、 若要把函数void friendfunction()定义为类myclass的友元函数,则应在类myclass的定义中加入语句_friend void friendfunction();_。 14、 类的具体表现是通过定义_对象_来操作的。 15、 在定义类的对象时,c+程序将自动调用该对象的_构造_函数初始化对象自身。 16、 一般情况下,按照面向对象的要求,把类中的数据成员(属性)定义为_private_权限,而把成员函数(方法)定义为_public_权限。 17、 在类中定义和实现的函数称为_内联函数_。 18、 非成员函数应声明为类的_友元函数_才能访问这个类的private成员。 2.3简答题a、类的含义b、构造函数的特点c、拷贝构造函数的调用d、析构函数的定义及其特点e、静态成员的分类及各自的特点2.4程序阅读题1) 写出下列程序的运行结果。#include class myclasschar ch;public:myclass();myclass(char character);void print();myclass();myclass:myclass()coutthis is a constructor!endl;ch=a;myclass:myclass(char character)coutthis is a constructor!endl;ch=character;void myclass:print()coutthe value of ch is chendl;myclass:myclass()coutthis is a destructor!endl;void main()myclass first,second(b);first.print();second.print();运行结果:this is a constructor!this is a constructor!the value of ch is athe value of ch is bthis is a destructor!this is a destructor!2)写出下列程序的运行结果#include class myclasspublic:myclass();void print();myclass();private:int i;static int j; ;int myclass:j=0;myclass:myclass()coutthis is constructor!endl;j+=10; void myclass:print() coutthe value of j is jendl; myclass:myclass()coutthis is a destructor!endl; void main() myclass first,second;first.print();second.print(); this is constructor!this is constructor!the value of j is20the value of j is20this is a destructor!this is a destructor!继承与派生3.1选择题.在c+中,类与类之间的继承关系具有( c )a)自反性 b)对称性 c)传递性 d)反对称性.在公有继承的情况下,基类的成员(私有的除外)在派生类中的访问权限( b )a)受限制 b)保持不变 c)受保护 d)不受保护.按解释中的要求在下列程序划线处填入的正确语句是:( c )#include class basepublic:void fun()coutbase:funendl;class derived:public basepublic:void fun() /在此空格处调用基类的函数fun()coutderived:funfun();.在保护继承的情况下,基类的成员(私有的除外)在派生类中的访问权限( c )a)受限制 b)保持不变 c)受保护 d)不受保护.下面描述中,表达错误的是:( b )a)公有继承时,基类中的public成员在派生类中仍是public的b)公有继承时,基类中的private成员在派生类中仍是private的c)公有继承时,基类中的protected成员在派生类中仍是protected的d)私有继承时,基类中的public成员在派生类中是private的.下列虚基类的声明中,正确的是:( b )a)class virtual b: public a b)class b: virtual public a c)class b: public a virtual d)virtual class b: public a.c+设置虚基类的目的是( a )a)消除二义性 b)简化程序 c)提高运行效率 d)减少目标代码class xint a;public:x(int x=0)a=x;class y:public xint b;public :y(int x=0,int y=0):x(y) b=x;下列语句组中出现语法错误的是(d)a. x *pa=new y(1,2);b.x a1=y(1,3);c.y b1(2,3); x &a3=b1;d.x a4(10);y b2=a4;class base public: int i; base(int t) : i ( t ) ;class derived: protected base base b; int j;public: derived (int t);在构造函数derived的下列定义中,正确的是(b )a. derived : : derived (int t) : b(t), j(t) b. derived : : derived (int t) : b(t), base(t), j(t) c. derived : : derived (int t) : base(t), j(t) d. derived : : derived (int t) : i(t), b(t), j(t) 在哪种派生方式中,派生类可以访问基类中的protected成员(b )a)public和private b)public、protected和private c)protected和private d)仅protected在c+中,类与类之间的继承关系具有(c )a) 自反性 b) 对称性 c) 传递性 d) 反对称性下列关于类的继承描述中,(a )是错误的a) 派生类可以访问基类的所有数据成员,也能调用基类的所有成员函数b) 派生类也是基类,但基类不一定具有派生类的全部属性和方法c) 继承描述类的层次关系,派生类可以具有与基类相同的属性和方法d) 一个基类可以有多个派生类,一个派生类可以有多个基类.当一个派生类仅有protected继承一个基类时,基类中的所有公有成员成为派生类的(c)a) public成员 b) private成员 c) protected成员 d) 友元当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的( b )a) public成员 b) private成员 c) protected成员 d) 友元不论派生类以何种方法继承基类,都不能使用基类的(b )a) public成员 b) private成员 c) protected成员 d) public成员和protected成员在创建派生类对象时,构造函数的执行顺序是(d)a) 对象成员构造函数、基类构造函数、派生类本身的构造函数b) 派生类本身的构造函数、基类构造函数、对象成员构造函数c) 基类构造函数、派生类本身的构造函数、对象成员构造函数d) 基类构造函数、对象成员构造函数、派生类本身的构造函数下列虚基类的声明中,正确的是( d )。 a)class virtual b:public a b)virtual class b:public a c)class b:public a virtual d)class b:virtual public a下面叙述错误的是(a )。 a)基类的protected成员在派生类中仍然是protected的 b)基类的protected成员在public派生类中仍然是protected的 c)基类的protected成员在private派生类中是private的 d)基类的protected成员不能被派生类的对象访问 下列说法中错误的是(a )。 a) 保护继承时基类中的public成员在派生类中仍是public的 b)公有继承时基类中的private成员在派生类中仍是private的 c)私有继承时基类中的public成员在派生类中是private的 d)保护继承时基类中的public成员在派生类中是protected的 关于多继承二义性的描述中,错误的是(b )。 a)一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性 b)解决二义性的最常用的方法是对成员名的限定法 c)基类和派生类中同时出现的同名函数,也存在二义性问题 d)一个派生类是从两个基类派生出来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,可能出现二义性 下面叙述错误的是(c )。 a)派生类可以使用private派生 b)对基类成员的访问必须是无二义性的 c)基类成员的访问能力在派生类中维持不变 d)赋值兼容规则也适用于多继承的组合 派生类的构造函数的成员初始化列表中,不能包含(c )。 a)基类的构造函数 b)派生类中子对象的初始化 c)基类中子对象的初始化 d)派生类中一般数据成员的初始化 下面(b )的叙述不符合赋值兼容规则。 a)派生类的对象可以赋值给基类的对象 b)基类的对象可以赋值给派生类的对象 c)派生类的对象可以初始化基类的引用 d)派生类的对象的地址可以赋值给指向基类的指针.下列虚基类的声明中,正确的是:( b )a)class virtual b: public a b)class b: virtual public a c)class b: public a virtual d)virtual class b: public a.c+设置虚基类的目的是( a )a)消除二义性 b)简化程序 c)提高运行效率 d)减少目标代码3.2填空题1、 垂直访问时,保护成员的访问控制权限与_公有_成员相同。 2、 利用继承能够实现_代码复用_。这种实现缩短了程序的开发时间,促使开发人员复用已经测试和调试好的高质量软件。 3、 派生类对基类的继承有三种方式:_public_、_protected_ 和_private_。 4、 多继承情况下,派生类的构造函数的执行顺序取决于_定义_派生类时所指定的各基类的顺序。 5、 c+提供的_多继承_机制允许一个派生类继承多个基类,即使这些基类是相互无关的。 6、 派生类可以调用其_定义_中不具备的数据和操作。 7、 对基类数据成员的初始化必须在派生类构造函数中的_初始化列表_处执行。 8、 如果类alpha继承了类beta,则类alpha称为_派生_类,类beta称为_基_类。 9、 己知下面的程序框架,按注释中的提示补充细节。#include class planetprotected:double distance;_/行星距太阳的距离int revolve;_/行星的公转周期public:planet(double d,int r)distance=d;revolve=r;class earth:public planetdouble circumference; /地球绕太阳公转的轨道周长public:/定义构造函数earth(double d,int r),并计算地球绕太阳公转的轨道周长。/假定:circumnference=2*d*3.1416_ earth(double d,int r): planet (d, r)_ circumnference=2*d*3.1416;_/定义show()函数显示所有信息_void show() cout”distance is ” distance”miles, revolve is” revolve”days”endl; cou” circumference is “ circumferenceendl; _;void main()earth ob(9300000,365);ob.show(); 10、 设置虚基类的目的是_为了消除二义性_,可通过_virtual_标识虚基类。 11、 若多继承时,多个基类中拥有一个同名的成员,则_不能_用调整访问权限确定对该成员的访问。 12、 根据基类的定义和测试程序,完成下面派生类的定义。class pointpublic:point(int i=0,int j=0)x=i;y=j;void move(int xoff,int yoff)x+=xoff;y+=yoff;int getx()return x;int gety()return y;private:int x,y;class rectangle :private pointpublic:rectangle(int x,int y,int w,int h)_:point(x,y)_w = w; h = h;_ void move(int xoff,int yoff)_ point:move(xoff, yoff);_ int getx()_return point:getx();_ int gety()_return point:gety();_ int getw()_return w;_ int geth()_return h;_ private:int w,h;#include #include void main()rectangle rect(1,2,3,4);rect.move(5,6);cout“the data of rect(x,y,w,h):(“rect.getx()“,”rect.gety()“,”rect.getw()“,”rect.geth()“)”endl; 13、 多继承可以视为是_单继承_的扩展。 14、 在划线处填上适当的语句,完成下列程序。#include class pointpublic:point(double a,double b,double c)_x =a; y=b; z =c;_double getx()return x;double gety()return y;double getz()return z;private:_double x, y;_protected:_double z;_;class line :_public_pointpublic:line(double a ,double b,double c,double d)_:point(a,b,c)_k = d;_ void show()coutgetx()endl;coutgety()“.endl;coutgetz()“zendl;coutkendl;private:double k;void main()line obj(1.2,3.4,5.6,7.8);obj.show(); 15、 类继承中,缺省的继承方式是_private_。 16、 当用protected继承从基类派生个类时,基类的public成员成为派生类的_protected_成员,protected成员成为派生类的_protected_成员。 18、 _公有派生_类的对象可作为_基_类的对象处理。 19、 指向基类的对象的指针变量也可以指向_公有派生类_的对象。 20、 类之间的”有”关系代表_组合_,”是”关系代表_继承_。 3.3简答题a、派生类的定义及其特点b、单继承和多继承的概念及其关系c、继承方式的种类及其各自的特点d、在继承中构造函数和析构函数的调用规则f、赋值兼容原则g、类模板和模板类的含义及其关系3.4读程序题1、 写出下列程序的运行结果。#include class basepublic:void who()coutclass baseendl;class derived1:public basepublic:void who()coutclass derived1endl;class derived2:public basepublic:void who()coutclass derived2who();p=&obj2;p-who();p=&obj3;p-who();obj2.who();obj3.who();答案:class baseclass baseclass baseclass derived1class derived22、 写出下列程序的运行结果。#include class instrumentpublic: void display() constcoutinstument:display.endl;class piano:public instrumentpublic:void display() constcoutpiano:display.endl;class guitar:public instrumentpublic:void display() constcoutguitar:display.endl;void tone(instrument & i)i.display();void main()guitar guitar1;tone(guitar1);piano piano1;tone(piano1);答案 instument:display.instument:display.3、 写出下列程序的运行结果。#include class apublic:a(char i)coutas cons.iendl;a()coutas des.endl;clas

温馨提示

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

评论

0/150

提交评论