面向对象程序设计考前复习题及答案
- 格式:doc
- 大小:48.00 KB
- 文档页数:12
C++面向对象技术复习题汇总(含答案)面向对象程序设计C++复习资料与答案第一、二、六、七章习题一、选择题1、系统约定C++源程序文件名的缺省的扩展名为()A、bccB、c++C、cppD、vcc2、面向对象的程序设计将数据与()放在一起,作为一个相互依存、不可分割的整体来处理。
A、对数据的操作B、信息C、数据隐藏D、数据抽象3、当一个函数无返回值时,函数的类型应定义为()A、voidB、任意C、intD、无4、对于C++的函数,正确的叙述是:A、函数的定义不能嵌套,但函数的调用可以嵌套B、函数的定义不能嵌套,但函数的调用不能嵌套C、函数的定义和调用都不能嵌套D、函数的定义和调用都可以嵌套5、下列语句中错误的是()A、int *p=new int(10);B、int *p=new int[10]C、int *p=new int;D、int *p=new int[40](0);6、假设已经有定义:const char *const name=”chen”;,下面的语句中正确的是:()A、name[3]=’a’; B、name=”lin”;C、name=new char[5]; D、cout<<name[3];< bdsfid="94" p=""></name[3];<>7、假设已经定义:char *const name=”chen”;, 下面的语句中正确的是:()A、name[3]=’q’; B、name=”lin”;C、name=new char[5]; D、name=new char(‘q’);8、假设已经定义:const char *name=”chen”;, 下面的语句中错误的是:()A、name[3]=’q’; B、name=”lin”;C、name=new char[5]; D、name=new char(‘q’);9、下面的类型声明中正确的是:( )A、int &a[4];B、int &*p;C、int &&qD、int i,*p=&i;10、假设定义了函数模板()templateT max(T x,T y){ return(x>y)?x:y;}并定义了int i;char c;错误的调用语句是:()A、max(i,i)B、max(c,c)C、max((int)c,i);D、max(i,c)11、模板的使用是为了()A、提高代码的可重用性B、提高代码的运行效率C、加强类的封装性D、实现多态性12、设有二个语句:int x[‘a’];cin>>x;则编译器认为()A、说明语句int x[‘a’]错B、二个语句都错C、语句cin>>x 错D、二个语句正确,没有语法错13、设有语句:void f(int a[10],int &x);int y[10],*py=y,n;则对函数f的正确调用语句是( )A、f(py[10],n);B、f(py,n)C、f(*py,&n)D、f(py,&n)14、在C++中实现封装是借助于()A、枚举B、类C、数组D、函数15、对于下面几个函数:(1) void f(int x,float y) {…… }(2) int f(int a,float b){…… }(3) int f(int i,int j){…… }(4) float k(int x){…… }是重载函数。
语法扩充选择题在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 ;cout<<rad<<endl ;A) 0 B) 100 C) 300 D) 200 系统在调用重载函数时,不能作为确定哪个重载函数被调用的依据是:( D )A)参数个数B)参数类型C)函数名称D)函数的返回值类型对C++语言和C语言的兼容性,描述正确的是:(A )A)C++t容C B)C++部分兼容C C)C++不兼容C D)C兼容C++在C++中使用流进行输入输出,其中用于屏幕输出的对象是:(C )A)cerr B)cin C)cout D)cfile 对使用关键字new 所开辟的动态存储空间,释放时必须使用( C )A)free B)create C)delete D)realse 在函数调用时,如某一默认参数要指明一个特定值,则有( A )A)其之前所有参数都必须赋值B)其之后所有参数都必须赋值C)其前、后所有参数都必须赋值D)其前、后所有参数都不必赋值下列哪个类型函数不适合声明为内联函数( A )A)函数体语句较多B)函数体语句较少C)函数执行时间较短D)函数执行时间过长int Func(int ,int) ;不可与下列哪个函数构成重载( B )A)int Func(int ,int,int) ;B)double Func(int ,int) ;C)double Func(double,double) ;D)double Func(int ,double);下面的哪个保留字不能作为函数的返回类型( C )A)void B)int C)new D)long 一个函数功能不太复杂,但要求被频繁调用,选用( A )。
面向对象程序设计复习题二一、填空1.程序的三种常见结构是、、,其中结构是程序的默认结构。
2.同名方法给出不同的实现,并通过参数类型或个数进行区分,称为。
3.和“继承”匹配的概念是。
4.由类构建对象的过程称为。
5.抽象类是含有的类。
6.实现软件复用有两种方式,分别为、、。
7.有定义const int *p,p称为。
8.通过继承产生的类称为。
9.virtual关键字在C++中有两个用处,分贝是,和。
10.方法重载和实现了多态性。
11.请给出C++外的另外一种支持面向对象设计语言。
12.类的三个要素是、、。
13.对象释放前执行的函数是。
二、名词解释1、构造函数2、对象3、运算符重载4、析构函数5. 面向对象6. 继承三、简答1.比较类和结构体?2.重载的意义?3.抽象类的作用和意义?4.组合与继承的区别?四、辩析1.任何父类对象都可以被子类对象替代。
2.public修饰符号破坏了数据的开放性。
3.private继承方式不能产生子类。
4.不能实例化的类一定是抽象类。
五、综合回答1.简述多态的实现机制。
2.谈谈多态的意义。
3.面向对象程序设计思想的优点和缺点。
面向对象程序设计复习题二答案一、填空(1)顺序(2)选择(3)循环(4)顺序(5)函数重载(6)抽象(7)实例化(8)纯虚函数(9)继承(10) 组合(9)和(10)不区分顺序(11)常量指针(12)派生类(13)虚函数(14)虚拟继承(13)和(14)不区分顺序(15)覆盖(16)Java或者C#(17)类的标识(18)类的状态(19)类的操作(17)(18)(19)不区分顺序(20)析构函数二、名词解释1、当类实例化时自动调用的成员函数,负责实现对象的初始化2、按照数据类型分配的内存空间,可以实现方法的调用3、将系统定义的运算符操作对象的类型扩展的过程,一般针对自定义类型4、对象空间释放之前自动调用的函数5、是程序设计思想,相对面向过程而言更加强调封装性6、两个类之间的一种关系,其中一个类的某个成员类型是另一个类三、简答1、C++中类和结构体具有同等的功能,唯一区别是类缺省成员属性是private,而结构体缺省为public2、重载的意义在于丰富了动作的多样性,但是并不加重程序员的负担。
总《面向对象程序设计c++》综合复习题集及答案详解一、单选题1. C++源程序文件的缺省扩展名为( A )。
A. cppB. exeC. objD. lik2. 由C++源程序文件编译而成的目标文件的缺省扩展名为( C )。
A. cppB. exeC. objD. lik3. 由C++目标文件连接而成的可执行文件的缺省扩展名为( B )。
A. cppB. exeC. objD. lik 4. 编写C++程序一般需经过的几个步骤依次是( )。
A. 编译、编辑、连接、调试 B. 编辑、编译、连接、调试C. 编译、调试、编辑、连接D. 编辑、调试、编辑、连接5. 以下标识符中不全是保留字的是()。
A. case for intB. default then whileC. bool class longD. gotoreturn char6. 能作为C++程序的基本单位是( )。
A. 字符B. 语句C. 函数D. 源程序文件 7. 程序中主函数的名字为()。
A. mainB. MAINC. MainD. 任意标识符 8. C++程序的基本模块为()。
A. 表达式B. 标识符C. 语句D. 函数 9. 可用作C++语言用户标识符的一组标识符是( )。
A. void define +WORDB. a3_b3 _123 YNC. for -abcCase D. 2a DO sizeof10. 存储以下数据,占用存储字节最多的是()。
A. 0 B. ‘0’C. “0”D. 0.0 11. 程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用( )符号作为分隔符。
A. 空格或逗号B. 逗号或回车C. 逗号或分号D. 空格或回车12. 设”int a=12;”,则执行完语句”a+=a*a;”后,a的值是( )。
A. 12B. 144C. 156D. 28813. 假设在程序中 a、b、c 均被定义成整型,所赋的值都大于1,则下列能正确表示代数式1/abc的表达式是( )。
模拟试题(1)一、判断对错题(10%)(对√,错×)()1.自动变量用堆方式创建,它与块共存亡。
()2.运算符+=是右结合的。
()3.表达式cout<<99的类型为int。
()4.++i是左值,但i++不是左值。
()5.Y[I][J]与*(*Y+I)+J不等价。
()6.从外部看类的private 成员和protected成员有区别。
()7.运算符&不可以重载。
()8.基类的protected成员经过protected派生,在派生类中它变成了private成员。
()9.2.0/-3.0是一个正确的表达式。
()10.字符'\12'的ASCII为12。
二、填空题(20%)#include <iostream.h>typedef struct node{long data;node * next;};class stack{private:node * head;①__________stack();~stack();void push (②__________);③__________ pop();④__________ print();};stack::stack(){ head = new ⑤__________head->next = ⑥__________ }stack::~stack(){node * p;p = head;while (p){head = head->next;⑦__________p = head;}}void stack::push(long x){node * p = new node;p->data = x;p->next = head->next;⑧__________ = p;cout<<"Push" <<x<<" ok !"<<endl;}long stack::pop(){node *p = head->next;if(p!=NULL){long x = p->data;head->next = p->next;⑨__________cout<<"pop "<<x<<" ok !"<<endl;return x;}elsecout<<"Stack is empty !"<<endl;return 0;}void stack::print(){node * p = head->next;cout<<"Stack_Top"<<endl;while (p){cout<<p->data<<endl;⑩__________;}cout<<"Stack_bottom"<<endl;}三、简答题(20%)(按条列出论点)1.注解。
一、单选题(每小题1分,共30分)1.在MyEclipse中,()视图可以将项目中包含的文件及层次结构展示出来。
CA) Package B)Declaration C)Navigator D) Console2.下列标识符中,正确的是()。
CA)class B) 123_rr C) _lei D) test&123.下列的()选项可以正确用以表示八进制值8。
0x代表16进制,0代表8进制 D A)0x8 B)0x10 C)08 D)0104.以下哪个不是Java的原始数据类型()DA) int B) boolean C) float D) Char引用数据类型5.下列有关Java布尔类型的描述中,正确的是()AA)一种基本的数据类型,它的类型名称为booleanB)用int表示类型C)其值可以赋给int类型的变量D)有两个值,1代表真,0代表假6.在Java中,不属于整数类型变量的是( ) AA) double 浮点型B) long C) int D) byte7.以下do-while语句构成的循环执行次数是()。
Bint k=0;do { ++k ;}while(k<1);A) 一次也不执行B) 执行1次C) 无限次D) 有语法错误,不能执行8.表达式(1/0<1)&& (12==0) 的值为()。
逻辑运算结果只有true和false两种 BA) true B) false C) 0 D) 运行时抛出异常9.以下()表达式不可以作为循环条件 AA) i=5 B )i<3 C) count==i D) bEqual=str.equals("q") 10.下列数组初始化正确的是() DA) int score[5] = {90,12,34,77,56};B) int[5] score = new int[];C) int[] score = new int[5]{90,12,34,77,56};D) int score[] = new int[]{90,12,34,77,56};11.若有定义:byte[] x={11,22,33,-66};其中0≤k≤3,则对x数组元素错误的引用是() CA) x[5-3] B) x[k] C) x[k+5] D) x[0]12.以下代码的输出结果是()。
Java面向对象程序设计复习题一、选择题1、下列哪个是Java中的关键字(C )。
A、runB、IntegerC、defaultD、implement2、下面关于Java.applet.Applet和其祖先类的描述语句哪个不对(B )。
A、Applet是Container的一种B、Applet是Window的一种C、Applet是Component的一种D、Applet是Panel的一种3、下列类DataOutputStream的构造方法正确的是(A )。
A、new dataOutputStream(new FileOutputStream(“out.txt”));B、new dataOutputStream(“out.txt”);C、new dataOutputStream(new writer(“out.txt”));D、new dataOutputStream(new FileWriter(“out.txt”));4、在switch(表达式)语句中,表达式的类型不能为(C )。
A、byteB、charC、longD、int5、在接口MouseMotionListener中方法正确的是(A )。
A、Public void mouseDragged(MouseEvent)B、Public boolean mouseDragged(MouseEvent)C、Public void mouseDragged(MouseMotionEvent)D、Public boolean MouseDragged(MouseMotionEvent)6、下面是一些异常类的层次关系ng.Exceptionng.RuntimeExceptionng.IndexOutOfBoundsExceptionng.ArrayIndexOutOfBoundsExceptionng.StringIndexOutOfBoundsException假设有一个方法X,能够抛出两个异常,Array Index和String Index异常,假定方法X中没有try-catch语句,下面哪个答案是正确的。
《面向对象程序设计》复习要点及复习题(一)复习要点1.标识符、基本数据类型(字节数)、构造数据类型、运算符的种类、运算符的优先级和结合性、控制台输入和输出2.三种基本控制结构、if…else语句、switch语句、for语句、while语句、do…while语句、跳转语句;函数参数传递、函数重载、内联函数;标识符的作用域和生存期。
3.类的定义和使用、this指针、构造函数和析构函数、组合技术、静态成员、友元、运算符重载4.指针与数组、二级指针、动态内存的分配与释放、深复制与浅复制、递归。
5.派生类的构造与析构、派生类与基类的赋值兼容、多重继承与虚基类。
6.虚函数与动态绑定、纯虚函数与抽象类(二) 复习题一、单项选择题。
1.在switch语句中,为了结束分支,一般应在每个分支的结尾处加上语句(C)。
A. continueB. gotoC. breakD. default2.说明友元函数的关键字是(D)。
A. inlineB. virtualC. staticD. friend3.下面对指向常量的指针描述正确的是(C)。
A. 只能指向常量B. 指向的数据可以被修改C. 可以指向普通变量D. 必须进行初始化4.友元函数没有(A)。
A. this指针B. 返回类型C. 函数名D. 参数5.关于重载,(A)不正确。
A. 类名可以重载B. 函数名可以重载C. 运算符可以重载D. 缺省参数是重载的一种方式6.用new分配n维数组空间,首地址赋予指针p,则p应为指向(C)维数组的指针。
A. 0B. 1C. n-1D. n7.为类X重载前缀自增运算,则函数返回类型应为(C)。
A. XB. X*C. X&D. int8.以下(A)未调用构造函数(X为类名)。
A. X*p;B. X obj;C. X obj(1);D. X obj=2;9.若在类外有函数调用X::func();则函数func是类X的(C)函数。
简答题1、传统的结构化程序设计的优点和缺点是什么?优点:(1)这种程序设计方法力求算法描述准确。
(2)对每一子过程模块容易进行程序正确性证明。
缺点:(1)这种程序设计方法本质上是面向“过程”的,而“过程”和“操作”又是不稳定和多变的,因此不能直接反映人类求解问题的思路。
(2)程序代码可重用性差。
程序中除少数标准库函数外,每设计一个程序时,程序员几乎从零做起。
即使重用代码,通常也是通过拷贝或编辑重新生成一份。
(3)维护程序的一致性困难。
该种方法将数据与对数据进行处理的程序代码分离。
2、什么是对象?每个对象都具有属性(Attribute)和方法(Method)这两方面的特征。
对象的属性描述了对象的状态和特征,对象的方法说明了对象的行为和功能,并且对象的属性值只应由这个对象的方法来读取和修改,两者结合在一起就构成了对象的完整描述。
3、什么是消息?在面向对象的程序设计中,由于对象描述了客观实体,它们之间的联系通过对象间的联系来反映。
当一个对象需要另外一个对象提供服务时,它向对方发出一个服务请求,而收到请求的对象会响应这个请求并完成指定的服务。
这种向对象发出的服务请求就称为消息。
4、什么是多态性?所谓多态性是指当程序中的其他部分发出同样的消息时,按照接收消息对象的不同能够自动执行类中相应的方法。
其好处是,用户不必知道某个对象所属的类就可以执行多态行为,从而为程序设计带来更大方便。
5、什么是面向对象的程序设计方法?这种方法将设计目标从模拟现实世界的行为转向了模拟现实世界中存在的对象及其各自的行为。
在OOP中,将“对象”作为系统中最基本的运行实体,整个程序即由各种不同类型的对象组成,各对象既是一个独立的实体,又可通过消息相互作用,对象中的方法决定要向哪个对象发消息、发什么消息以及收到消息时如何进行处理等。
6、面向对象方法的特点是什么?(1)OOP以“对象”或“数据”为中心。
由于对象自然地反映了应用领域的模块性,因此具有相对稳定性,可以被用作一个组件去构成更复杂的应用,又由于对象一般封装的是某一实际需求的各种成分,因此,某一对象的改变对整个系统几乎没有影响。
(2)引入了“类”(class)的概念。
类与类以层次结构组织,属于某个类的对象除具有该类所描述的特性外,还具有层次结构中该类上层所有类描述的全部性质,OOP中称这种机制为继承。
(3)OOP方法的模块性与继承性,保证了新的应用程序设计可在原有对象的数据类型和功能的基础上通过重用、扩展和细化来进行,而不必从头做起或复制原有代码,这样,大大减少了重新编写新代码的工作量,同时降低了程序设计过程中出错的可能性,达到了事半功倍的效果。
7、面向对象的程序设计方法与结构化程序设计方法的比较(1)传统的结构化程序设计方法以过程为中心构造应用程序,数据和处理数据的过程代码是分离的、相互独立的实体,设计出的程序可重用代码少,且当代码量增加时维护数据和代码的一致性困难。
(2)面向对象程序设计方法中,对象所具有的封装性和继承性使得代码重用成为可能,并大大减少了程序出错的可能性。
(3)面向对象方法吸收了结构化程序设计方法的优点,同时引入了新概念、新机制并建立了比传统方法更高层次的抽象。
二、选择题略三、填空题(1)类是一个支持集成的抽象数据类型,而对象是类的【1】。
【参考答案】【1】实例(2)在C++语言的面向对象程序设计框架中,【2】是程序的基本组成单元。
【参考答案】【2】类(3)C++语言程序的注释可以出现在程序中的任何地方,一个注释以【3】作为开始和结束的标记。
【参考答案】【3】/* */(4)以下程序的输出结果是【4】。
#include "iostream.h"void fun(){ static int a;a+=2;cout << a << " "; }void main(){ int cc;for(cc=1;cc<4;cc++)fun();cout << endl;}【参考答案】【4】2 4 6(5)下列程序在构造函数和析构函数中申请和释放类的数据成员int *a,申请时使用形参b初始化a,请填空。
class A{ public:A(int b);~A();private:int *a; };A::A(int b){ 【5】; }A::~A(){ 【6】; }【参考答案】【5】a = new int(b); 【6】delete a6. 多态性与【7】和【8】共同构成面向对象程序设计的三大机制。
【参考答案】【7】数据封装【8】继承(7)将x+y*z中的"+"用成员函数重载,"*"用友元函数重载应写为【9】。
【参考答案】【9】x. operator+(operator*(y,z))(8)派生类的成员一般分为两部分,一部分是【10】,另一部分是自己定义的新成员。
【参考答案】【10】从基类继承的成员(9)以下程序输出的结果是【11】。
#include "iostream.h"void main(){int a=5,b=4,c=3,d;d=(a>b>c);cout<<d; }【参考答案】【11】0(10)如果要把返回值为void的函数A声明为类B的友元函数,则应在类B的定义中加入的语句是【12】。
【参考答案】【12】friend void A( );(11)如果类B继承了类A,则称类A为类B的基类,类B称为类A的【13】。
【参考答案】【13】派生类(12)将x+y中的+运算符用友元函数重载应写为【14】。
【参考答案】【14】operator+(x,y)(13)已知程序的结果为1 2 3,请填空。
#include template class A{ public:T x,y,z;void display(){cout << x << " " << y << " " << z;} };void main(){ Aa1;【15】【16】【17】a1.display(); }【参考答案】【15】a1.x=1 【16】a1.y=2 【17】a1.z=3(14)下列程序段的输出结果是【18】。
cout << fixed << 509.123456789 << endl;【参考答案】【18】509.123457四、综合应用题1. 使用VC6打开考生文件夹下的工程kt15_3。
此工程包含一个kt15_3.cpp,其中定义了类A、A1和A2,其中A1类由A类公有派生,A2类由A1类公有派生。
上述三个类的定义并不完整,请按要求完成下列操作,将程序补充完整。
(1)定义类A的构造函数,该构造函数有一个整型的参数x,在构造函数中请将x赋值给数据成员a。
请在注释“//**1**”之后添加适当的语句。
(2)定义类A1的构造函数,该构造函数有两个整型参数x和y,在构造函数中请将x赋值给数据成员b,将y作为基类A构造函数的参数值传入。
请在注释“//**2**”后添加适当的语句。
(3)定义类A2的构造函数,该构造函数有三个整型的参数x,y和z,在构造函数中请将x赋值给数据成员c,将y和z分别赋值给基类A1构造函数的参数x和y。
请在注释“//**3**”之后添加适当的语句。
(4)完成类A2的成员函数show的定义,该函数调用基类成员函数,输出基类数据成员a和b及类A2自身的数据成员c的值,上述三个值在输出时以空格隔开。
请在注释“//**4**”之后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
程序输出结果如下:96962源程序文件kt15_3.cpp清单如下:#include<iostream.h>classA{ inta;public://**1**intgeta(){returna;} };classA1:publicA{ intb;public://**2**intgetb(){returnb;} };classA2:publicA1{ intc;public://**3**voidshow(){ //**4** } };voidmain(){ A2a(2,6,9);cout<<a.geta()<<endl;cout<<a.getb()<<endl;;a.show(); }【参考答案】(1)A(int x) {a=x;}(2)A1(int x,int y) : A(y){b=x;}(3)A2(int x,int y,int z):A1(y,z){c=x;}(4)cout<<geta()<<" "<<getb()<<" ";cout<<c<<"n";五、阅读程序题(写出程序运行结果)1 .#include <iostream.h>#include <string.h>class Student{ public:Student(char *pName="No name"){ cout<<"构造新同学:"<<pName<<endl;strncpy(name, pName, sizeof(name));name[sizeof(name)-1]='\0';}Student(Student &s){ cout<<"构造copy of "<<<<endl;strcpy(name, " copy of ");strcat(name,);}~Student(){ cout<<"析构"<<name<<endl; }protected:char name[40]; };class Tutor{ public:Tutor(Student &s):student(s){ cout<<"构造指导教师\n"; }protected:Student student;};void main(){ Student st1;Student st2("zhang");Tutor tutor(st2);}2. #include "iostream.h"class B1{protected:int b1;public:B1(int val1){ b1=val1;cout<<"base1 is called"<<endl; } };class B2{ protected:int b2;public:B2(int val2){ b2=val2;cout<<"base2 is called"<<endl; }};class D: public B1,public B2{protected:int d;public:D(int val1, int val2, int val3);};D::D(int val1, int val2, int val3):B1(val1),B2(val2) { d=val3;cout<<"derived class is called";}void main(){ D dobj(1,2,3); }3. # include <windows.h># include <iostream.h>class married{private:int number;char *name;public:static int glob;void set_mes (char *a);} ;void married :: set_mes (char *a){name = new char[strlen(a) + 1] ;strcpy (name, a) ;number=++glob;cout << " 编号:"<<number<<endl;}int married :: glob= 0 ;void main (){ married person[100];int i ;char str[8] ;cout<<endl;for ( i=0; i<3; i++){ cout << " 输入姓名:"; cin >> str ;person[i].set_mes ( str ) ; }cout<<endl;}假定输入zhang↙wang↙li↙请写出程序的结果。