面向对象C++复习题
- 格式:doc
- 大小:83.00 KB
- 文档页数:15
一选择题(共 45题)1.对类的构造函数和析构函数描述正确的是()。
A.构造函数可以重载,析构函数不能重载√B.构造函数不能重载,析构函数可以重载C.构造函数可以重载,析构函数也可以重载D.构造函数不能重载,析构函数也不能重载2.继承具有(),即当基类本身也是某一个类派生类时,底层的派生类也会自动继承间接基类的成员。
A)规律性 B.传递性√ C.重复性 D.多样性3.假设OneClass为一个类,则该类的复制初始化构造函数的声明语句为()。
(OneClass p); B. OneClass& (OneClass p );C. OneClass(OneClass & p);√D. OneClass (OneClass * p);4.对于结构中定义的成员,其默认的访问权限为()。
B. protected D. static5.下面对静态数据成员的描述中,不正确的是()。
A.静态数据成员可以在类体内进行初始化√B.静态数据成员不可以在类体内进行初始化C.静态数据成员能受private控制符的作用D.静态数据成员调用前必须初始6. C++中的类有两种用法:一种是类的实例化,即生成类对象,并参与系统的运行;另一种是通过()派生了新的类。
A.复用B.继承√C.封装D.引用7. 假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a 的格式为()。
A. x(a)B. x[a]C. x->aD. √9. 对于一个类的构造函数,其函数名与类名( )。
A. 完全相同√B. 基本相同C. 不相同D. 无关系10. 一个类的构造函数通常被定义为该类的( )成员。
A. 公有√B. 保护C. 私有D. 友元11. 一个类的析构函数通常被定义为该类的( )成员。
A. 私有B. 保护C. 公有√D. 友元12. 一个类的静态数据成员所表示属性 ( )。
A. 是类的或对象的属性B. 只是对象的属性C. 只是类的属性√D. 类和友元的属性13.类的析构函数的作用是()。
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》综合复习题集及答案详解综合复习题集一、单选题1.C++源程序文件的缺省扩展名为(A)。
A.cppB.e某eC.objD.lik2.由C++源程序文件编译而成的目标文件的缺省扩展名为(C)。
A.cppB.e某eC.objD.lik3.由C++目标文件连接而成的可执行文件的缺省扩展名为(B)。
A.cppB.e某eC.objD.lik4.编写C++程序一般需经过的几个步骤依次是()。
A.编译、编辑、连接、调试B.编辑、编译、连接、调试C.编译、调试、编辑、连接D.编辑、调试、编辑、连接5.以下标识符中不全是保留字的是()。
A.caeforintB.defaultthenwhileC.boolclalongD.gotoreturnchar6.能作为C++程序的基本单位是()。
A.字符B.语句C.函数D.源程序文件7.程序中主函数的名字为()。
A.mainB.MAINC.MainD.任意标识符8.C++程序的基本模块为()。
A.表达式B.标识符C.语句D.函数9.可用作C++语言用户标识符的一组标识符是()。
A.voiddefine+WORDB.a3_b3_123YNC.for-abcCaeD.2aDOizeof10.存储以下数据,占用存储字节最多的是()。
A.0B.‘0’C.“0”D.0.011.程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用()符号作为分隔符。
A.空格或逗号B.逗号或回车C.逗号或分号D.空格或回车12.设”inta=12;”,则执行完语句”a+=a某a;”后,a的值是()。
A.12B.144C.156D.28813.假设在程序中a、b、c均被定义成整型,所赋的值都大于1,则下列能正确表示代数式1/abc的表达式是()。
A.1.0/a某b某cB.1/(a某b 某c)C.1/a/b/(float)cD.1.0/a/b/c14.设”inta=15,b=26;”,则”cout<A.15B.26,15C.15,26D.2615.设某是一个bool型的逻辑量,y的值为10,则表达式某&&y的值为()。
1.面向对象分析的第一步是 A 。
A.确定问题域 B.确定附加的系统约束 C.定义服务 D.定义类和对象2.在C#语言中引进了类的概念。
类的定义包括类名,类的说明和类的实现, D 是类的外部接口。
A.类的引用 B. 类的实现 C.类的说明 D.类的标识3. A 是类的内部表示。
A.类的说明 B.类的实现 C.类的标识 D.类的构造4.有了 B 可以隐藏类对象内部实现的复杂细节,有效地保护内部所有数据不受外部破坏。
A.多态性 B.封装性 C.兼容性 D.继承性5. D 增强了类的共享机制,实现了软件的可重用性,简化系统的开发工作。
A.多态性 B.封装性 C.兼容性 D.继承性6. A 可实现函数重载和运算符重载。
A.多态性 B.封装性 C.兼容性 D.继承性7.在面向对象程序设计中,常常将接口的定义与接口的实现相分离,可定义不同的类实现相同的接口。
在程序运行过程中,对该接口的调用可根据实际的对象类型调用其相应的实现。
为达到上述目的,面向对象语言须提供 B 机制。
A.继承和过载B.抽象类C.继承和重置D.对象自身应用8.下面关于面向对象的描述正确的是 A 。
A.针对接口编程,而不是针对实现编程B.针对实现编程,而不是针对接口编程C.接口与实现不可分割D.优先使用继承而非组合9.面向对象程序设计语言为 D 提供支持。
A.面向对象用例设计阶段 B.面向对象分析阶段C.面向对象需求分析阶段 D.面向对象实现阶段10.在面向对象方法中,对象是类的实例。
表示对象相关特征的数据称为对象的 C 。
A.数据变量B.数据结构C.属性D.定义11.在类数据上执行的功能操作称为对象的 A 。
A.行为B.调用C.实现D.函数12.一个对象通过发送 B 来请求另一个对象为其服务。
A.调用语句B.消息C. 命令D.函数13.在面向对象技术中,类属是一种 B 机制。
A.包含多态B.参数多态C.过载多态D.强制多态14.一个类属类是关于一组类的一个特性抽象,它强调的是这些类的成员特征中与 A 的那些部分。
c面向对象程序设计期末考试题及答案一、选择题(每题2分,共20分)1. 下列哪个是面向对象程序设计的特点?A. 封装B. 继承C. 多态D. 所有选项都是2. 在Java中,以下哪个关键字用于定义类?A. classB. structC. typeD. classdef3. 以下哪个是Java中不允许的类成员访问修饰符?A. publicB. protectedC. privateD. global4. 以下哪个是Java中实现多态的方式?A. 函数重载B. 函数重写C. 接口D. 抽象类5. 在Java中,哪个关键字用于声明一个方法,该方法没有返回值?A. voidB. returnC. noneD. null6. 以下哪个是Java中创建对象的语法?A. new ClassName();B. create ClassName;C. make ClassName;D. ClassName();7. 在Java中,以下哪个是正确的构造方法声明?A. public ClassName();B. public ClassName new();C. public new ClassName();D. public ClassName create();8. 以下哪个是Java中实现继承的方式?A. 使用extends关键字B. 使用implements关键字C. 使用interface关键字D. 使用new关键字9. 在Java中,以下哪个关键字用于实现接口?A. implementsB. extendsC. interfaceD. class10. 以下哪个是Java中实现封装的方式?A. 使用public关键字B. 使用private关键字C. 使用protected关键字D. 使用default关键字答案:1. D2. A3. D4. B5. A6. A7. A8. A9. A10. B二、简答题(每题10分,共20分)1. 简述面向对象程序设计中的“封装”概念及其重要性。
1、数据共享与保护一、选择题:1、在下面存储类中, ( C ) 对象的可见性与生存期不一致。
A. 外部类B. 自动类C. 内部静态类D. 寄存器类2、在下面存储类中,(A)的对象不是局部变量。
A. 外部静态类B. 自动类C. 函数形参D. 寄存器类3、关于局部变量,下面说法正确的是( C )。
A. 定义该变量的程序文件中的函数都可以访问B. 定义该变量的函数中的定义处以下的任何语句都可以访问C. 定义该变量的复合语句中的定义处以下的任何语句都可以访问D. 定义该变量的函数中的定义处以上的任何语句都可以访问4、一个类的静态数据成员所表示属性 ( C )。
A. 是类的或对象的属性B. 只是对象的属性C. 只是类的属性D. 类和友元的属性5、类的静态成员的访问控制( D)。
A. 只允许被定义为privateB. 只允许被定义为private或protectedC. 只允许被定义为publicD. 可允许被定义为private、protected或public6、静态成员函数对类的数据成员访问(B)。
A. 是不允许的B. 只允许是静态数据成员C. 只允许是非静态数据成员D. 可允许是静态数据成员或非静态数据成员7、被非静态成员函数访问的类的数据成员( A )。
A. 可以是非静态数据成员或静态数据成员B. 不可能是类的静态数据成员C. 只能是类的非静态数据成员D. 只能是类的静态数据成员8、静态数据成员的初始化是在(D)中进行的。
A. 构造函数B. 任何成员函数C. 所属类D. 全局区9、当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B的( D )。
A. 只能是公有成员B. 只能是保护成员C. 只能是除私有成员之外的任何成员D. 具有任何权限的成员10、引入友元的主要目的是为了( C )。
A. 增强数据安全性B. 提高程序的可靠性C. 提高程序的效率和灵活性D. 保证类的封装性11、一个类的成员函数也可以成为另一个类的友元函数,这时的友元说明( A )。
c面向对象期末复习c++面向对象期末复习一、题型:1. 单项选择题(在每小题地四个备选答案中,选出一个正确答案,并将正确答案地序号填在题干地括号内.每小题2分,共20分)2. 填空题(每小题2分,共22分)3. 给出下列程序运行后地输出结果(每小题8分,共24分)4. 写出下列每个函数地功能(每小题8分,共16分)5. 编写程序(18分)二、练习题:-----------------------------------练习题1:{一}、单项选择题(在每小题地四个备选答案中,选出一个正确答案,并将正确答案地序号填在题干地括号内.每小题2分)1、在每个C++程序中都必须包含有这样一个函数,该函数地函数名为(A )A. mainB. MAINC. nameD. function2、设x和y均为bool量,则x&&y为真地条件是( A )A. 它们均为真B. 其中一个为真C. 它们均为假D. 其中一个为假3、下面地哪个保留字不能作为函数地返回类型?( C )A. voidB. intC. newD. long4、假定a为一个整型数组名,则元素a[4]地字节地址为( C )A. a+4B. a+8C. a+16D. a+325、假定要对类AB定义加号操作符重载成员函数,实现两个AB 类对象地加法,并返回相加结果,则该成员函数地声明语句为:( B )A. AB operator+(AB&a,AB&b)B. AB operator+(AB& a)C. operator+(AB a)D. AB & operator+( )6.类地析构函数地作用是( D )A.一般成员函数B.类地初始化C.对象地初始化D.撤消对象时所做地清理工作7.类地析构函数是在( C )调用地.A.类创建时B.创建对象时C.删除对象时D.不自动调用8.在( C )情况下适宜采用inline定义内联函数.A.函数体含有循环语句B.函数体含有递归语句C.函数代码少、频繁调用D.函数代码多、不常调用9.假定AB为一个类,则执行AB x;语句时将自动调用该类地( B )A.有参构造函数B.无参构造函数C.拷贝构造函数D.赋值构造函数10.C++语言建立类族是通过( B )A.类地嵌套B.类地继承C.虚函数D.抽象类(二)、填空题(每小题2分)1、执行“cout <<char('a'+2)<<="" c="" p="">2、float 和double 类型地大小分别为 4 和8 .3、算术表达式(xy2/3a)+4b-1对应地C++表达式为((x*y*y)/(3*a))+4*b-1 .4、关系表达式x+y>5地相反表达式为x+y<=5 .5、假定一个一维数组地定义为“char * a[8] ;”,则该数组所含元素地个数为8 ,所占存储空间地字节数为32 .6、变量分为全局和局部两种, 局部变量没有赋初值时,其值是不确定地.7、假定a是一个二维数组,则a[i][j]地指针访问方式为.8、假定一个结构类型定义为“struct D{int a;union{int b;double c;}; D * d[2] ; } ;”,则该类型地大小为字节.9、对一个类中地数据成员地初始化可以通过构造函数中地实现,也可以通过构造函数中地实现.10、假定AB为一个类,则执行“AB a[10];”语句时,系统自动调用该类地构造函数地次数为.11、假定类AB中有一个公用属性地静态数据成员bb,在类外不通过对象名访问该成员bb地写法为.(三)、给出下列程序运行后地输出结果(每小题8分)1、# includeint a=5;void main() {int a=10,b=20;cout <<a<<' '<<b<<endl;<="" p="">{ int a=0,b=0;for (int i=1; i<6; i++) {a+=i; b+=a;}cout <<a<<' '<<::a<<endl;<="" '<<b<<'="" p=""> }cout <<a<<' '<<b<<endl;<="" p="">}2、# includeint LB(int *a,int n) {int s=1;for (int i=0; i<="" p="">s*=*a++;return s;}void main() {int a[]={1,2,3,4,5,6,7,8};int b=LB(a,5)+LB(&a[3],3);cout <<"b="<<b<<endl;< p="">}3、# include# includestruct Worker{char name[15]; // 姓名int age; // 年龄float pay; // 工资};void main() {Worker x;char *t="liouting";int d=38; float f=493;strcpy(/doc/f91145865.html,,t); x.age=d; x.pay=f;cout <}(四)、写出下列每个函数地功能(每小题8分)1、# includeint SA(int a,int b) {if (a>b) return 1;else if (a==b) return 0;else return -1;}2、struct StrNode {char name[15]; // 字符串域StrNode * next; // 指针域};void QB(StrNode * & f ,int n) {if (n==0) { f=NULL; return; }f=new StrNode;cin >>f->name;StrNode * p=f;while (--n) {p=p->next=new StrNode;cin >>p->name;}p->next=NULL;}(五)、编写程序把从键盘上输入地一批整数(以-1作为终止输入地标志)保存到文本文件“a:xxk1.dat”中.------------------------------------------练习题2:一、选择题(每题2分)一个函数功能不太复杂但要求被频繁调用,应选用A)内联函数B)重载函数C)递归函数D)嵌套函数A 为了使类中地某个成员不能被类地对象通过成员操作符访问,则不能把该成员地访问权限定义为A)public B)protected C)privateD)static(3)B 在C++语言程序中,对象之间地相互通信通过A)继承实现B)调用成员函数实现C)封装实现D)函数重载实现类地析构函数是在什么时候调用地?A)类创建时B)创建对象时C)删除对象时D)不自动调用C 通常拷贝构造函数地参数是A)某个对象名B)某个对象地成员名C)某个对象地引用名D)某个对象地指针名下列不是描述类地成员函数地是A)构造函数B)析构函数C)友元函数D)拷贝构造函数C 继承机制地作用是A)信息隐藏B)数据封装C)定义新类D)数据抽象B 在C++语言类体系中,不能被派生类继承地有A)转换函数B)构造函数C)虚函数D)静态成员函数C 对于类定义class A{public:virtual void funcl(){}void func2(){}};class B:public A{public:void funcl(){cout<<"class B func 1”;virtual void func2(){cout<<"class B func 2";};下面正确地叙述是A)A::func2()和B::funcl()都是虚函数B)A::func2()和B::funcl()都不是虚函数C)B::funcl()是虚函数,而A::func2()不是虚函数D)B::funcl()不是虚函数,而A::func2()是虚函数下面关于运算符重载地描述错误地是A)运算符重载不能改变操作数地个数、运算符地优先级、运算符地结合性和运算符地语法结构B)不是所有地运算符都可以进行重载C)运算符函数地调用必须使用关键字operatorD)在C++语言中不可通过运算符重载创造出新地运算符作用域运算符地功能是()A)给定作用域地大小B)表示作用域地级别C)某个成员是属于哪个类地D)指出作用域地范围D ()不是构造函数地特征A)构造函数可以重载B)构造函数可以设置缺省参数C)构造函数地函数名和类名相同D)构造函数必须指定类名13 关于new运算符地下列描述中,()是错地A)使用它创建对象时要调用构造函数B)使用它创建对象数组时必须指定初始值C)使用它创建对象数组时不能指定初始值D)使用它创建地对象或对象数组可以使用运算符delete删除派生类地描述中,()是错地A)一个派生类可以作为另一个派生类地基类B)派生类至少有一个基类C)派生类中继承地基类成员地访问权限在派生类中保持不变D)派生类地成员除了它自己地成员外,还包含了它地基类地成员设置虚基类地目地是(). A)减少目标代码B)提高运行效率C)消除二义性D)简化程序D 以下关于虚函数和纯虚函数地说法中,()是不正确地A)在派生类中虚函数可以不用关键字virtual说明B)虚函数在派生类中都不需要重定义C)不能为虚函数定义缺省操作D)纯虚函数在派生类中可以不重定义C 以下关于抽象类地说法中,()是不正确地A)不可创建抽象类地实例B)可以声明抽象类地引用C)抽象类地派生类也是抽象类D)抽象类地派生类也可以是抽象类D 以下关于多态性地说法中,(?)是不正确地A)每个多态类地基类有一个虚函数表B)多态类地每一个派生类有一个虚函数表C)每个多态类地对象有一个虚表指针D)虚函数调用与this指针无关C C++语言对C语言做了很多改进,C++语言相对于C语言地最根本地变化是A)增加了一些新地运算符B)允许函数重载,并允许设置缺省参数C)规定函数说明符必须用原型D)引进了类和对象地概念(20)在公有派生情况下,有关派生类对象和基类对象地关系,下列叙述不正确地是A)派生类地对象可以赋给基类地对象B)派生类地对象可以初始化基类地引用C)派生类地对象可以直接访问基类中地成员D)派生类地对象地地址可以赋给指向基类地指针二、填空题(每空3分)(1) 一个类可以从直接或间接地基类中继承所有属性和方法.采用这个方法提高了软件地可重用性 .(2)在C++中封装性、继承性和多态性是面向对象思想地主要特征.(3)下列for语句地循环次数为 5 .for(int a=0,b=1;b&&a<5;a++);(4) 下面程序地输出结果是12345 .#includevoid main(){int a[6]={1,2,3,4,5,6};for(int i=0;i<5;i++)cout<<i;< p="">cout<<endl;< p="">}(5) C++程序是从主函数开始执行地.(6) 假定A为一个类,则语句A (A & A);为该类拷贝虚构函数 .(7) 派生类构造函数地执行顺序是先执行基类地构造函数.然后执行成员对象地构造函数,最后执行派生类地构造函数.(8) C++语言提供地基本控制结构可以分为3种类型:顺序结构、选择结构和循环结构.(9) 继承地方式有公有继承、私有继承和保护继承 3种.三、名词解释(每题2.5分)1.类2.对象3.封装性4.继承性四、阅读程序并写出结果(每题2分)1.#includeclass A{static int n;public:A(){n=1;}A(int num){n=num;}void print(){cout<<n;}< p="">};int A::n=2:void main(){A a,b(3);a.print();b.pint();cout<<endl;< p="">}2.#includeclass base{public:base(){ cout<<”0”;}};class basel:virtual base}public:base1(){cout<<”1”;}};class base2:virtual base{public:base2(){cout<<”2”;}};class derived:public base1,public base2 { public:derived(){cout<<”3”;}};void main(){derived obj;cout<<endl;< p="">}3.#includeint fun(int a[], int n){int result=1:for(int i=1;i<n;i++)< p="">result=result*a[i];return result;}void main(){int a[3]={3,4,5};cout<<fun(a,3);< p="">}4.#includevoid main( ){int i=1;while(i<=8)if(++i%3!=2) continue;else cout<<i;< p="">}5.#includeclass M{int m1,m2;public:M(int x,int y){m1=x; m2=y;}void print(){cut<<m1<<”,”<<m2<<endl;}< p=""> void print()const;};void M::print()const{cut<<m1+m2<<endl;< p="">}void main(){M a(5,4);a.print();const M b(8,7);b.print();}五、程序设计写一个程序,定义抽象基类Shape,由它派生出3个派生类,Circle(圆形),Square(正方形),Triangle(三角形).用虚函数分别计算几种图形面积,并求它们地和.要求用基类指针数组,使它地每一个元素指向一个派生类对象,其中圆半径radius为15.2,正方形边长length 为6.5,三角形底边长bottom为5.4,高height为6.8.</m1+m2<<endl;<></m1<<”,”<<m2<<endl;}<></i;<></fun(a,3);<></n;i++)<></endl;<></endl;<></n;}<></endl;<></i;<></b<<endl;<></a<<'></a<<'></a<<'></char('a'+2)<。
c面向对象期末考试试题# 面向对象期末考试试题## 一、选择题(每题2分,共20分)1. 在面向对象编程中,封装的目的是:- A. 隐藏实现细节- B. 提高代码执行效率- C. 增加代码的可读性- D. 减少内存使用2. 下列哪个是Java中合法的类名?- A. 2class- B. Class- C. class$- D. _class3. 在Java中,以下哪个关键字用于定义一个类?- A. `public`- B. `class`- C. `interface`- D. `void`4. 以下哪个方法可以用于获取对象的内存地址?- A. `toString()`- B. `hashCode()`- C. `equals()`- D. `getClass()`5. 面向对象编程中的继承主要用来实现:- A. 代码复用- B. 多态性- C. 封装性- D. 抽象性6. 在Java中,`final`关键字可以用于:- A. 声明一个不可变变量- B. 声明一个不可被子类继承的类- C. 声明一个不可被重写的构造方法- D. 声明一个不可被重写的方法7. 以下哪个是Java的访问控制修饰符?- A. `public`- B. `static`- C. `abstract`- D. `volatile`8. Java中哪个关键字用于定义接口?- A. `class`- B. `struct`- C. `interface`- D. `enum`9. 以下哪个是Java中多态性的表现?- A. 一个类可以继承多个类- B. 一个类可以有多个构造方法- C. 一个方法可以有多个实现- D. 一个接口可以有多个实现类10. 在Java中,以下哪个是正确的方法重写规则?- A. 子类重写的方法必须与父类方法的返回类型相同- B. 子类重写的方法可以改变访问控制修饰符- C. 子类重写的方法可以减少方法的参数- D. 子类重写的方法可以抛出新的检查型异常## 二、简答题(每题10分,共20分)1. 解释什么是多态性,并给出一个Java代码示例,展示如何实现多态性。
c面向对象程序设计考试试题一、选择题(每题2分,共20分)1. 面向对象程序设计中,以下哪一个不是基本特征?A. 封装B. 继承C. 多态D. 过程2. 在Java中,以下哪个关键字用于定义类?A. classB. functionC. structD. type3. 以下哪个是Java中不允许的类名?A. MyClassB. 1MyClassC. MyClass1D. MyClass$4. 在Java中,以下哪个是正确的构造方法声明?A. void MyClass() {}B. int MyClass() {}C. MyClass MyClass() {}D. MyClass() {}5. 以下哪个关键字用于实现类的继承?A. extendsB. implementsC. overrideD. abstract6. 以下哪个关键字用于声明接口?A. classB. interfaceC. abstractD. enum7. 在Java中,以下哪个关键字用于实现多态?A. newB. superC. overrideD. implements8. 在Java中,以下哪个关键字用于定义包?A. packageB. importC. classD. interface9. 以下哪个是Java中的访问控制修饰符?A. publicB. staticC. finalD. void10. 在Java中,以下哪个是正确的方法重载声明?A. void display(int a, int b)B. int display(int a, int b)C. void display(int a, int b) {}D. void display(int a, int b) { return a + b; }二、简答题(每题10分,共30分)1. 简述面向对象程序设计中的封装、继承和多态三个基本特征。
2. 解释Java中的接口和抽象类的区别。
一、填空题1.C++中有两种数据类型:( char)和( int long )可以使用signed修饰符。
在C++中,用数组、指针、和( 引用)作为函数参数,能够将参数值带回。
2.为了降低函数调用的时间开销,建议将小的调用频繁的函数定义为(内联函数),方法是在函数类型前加上(inline)关键字。
3.面向对象的程序设计有四大特征,它们是抽象、封装、( 继承)、( 多态)。
4.拷贝构造函数是在用一个对象初始化另一个对象时被调用,系统缺省的拷贝构造函数的工作方法是( 把对象的每个数据成员的值都复制到新建立的对象中)。
5.用new申请某一个类的动态对象数组时,在该类中必须能够匹配到(该类的)构造函数,否则应用程序会产生一个编译错误。
6.静态数据成员必须在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象( 共享)。
7.在C++中,定义重载函数时,应至少使重载函数的参数个数或参数类型( 不同)。
8.在C++中,虽然友元提供了类之间数据进行访问的一种方式,但它破坏了面向对象程序设计的( 封装)特性。
9.预编译指令由三种,它们是:文件包含、( 宏定义)和( 条件编译)。
10.静态的成员函数没有隐含的( this),所以,它们只能直接访问类的静态的数据成员。
11.在C++中,函数的参数有两种传递方式,它们是值传递和( 地址)。
12.当非静态成员函数被调用时,该成员函数的( this)指向调用它的对象。
13.拷贝构造函数使用( 引用)作为参数初始化创建中的对象。
14.在公有继承的情况下,基类数据成员在派生类中的访问权限( 不变)。
15.在C++中,构造派生类对象时,总是先从( 基类)的初始化开始的。
16.当需要统计程序中某个类创建对象的个数时,需要给该类定义(静态数据)成员。
17.在多个类之间有重复继承时,为避免被重复继承的基类数据成员在内存中有多个拷贝,应将该基类定义为(虚基类)。
18.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为( 抽象类),定义该类至少具有一个( 纯虚函数)。
C#面向对象编程基础考试(答案见尾页)一、选择题1. 在C中,下列哪个关键字用于定义类的成员变量?A. privateB. publicC. protectedD. internal2. 在C中,下列哪个关键字用于定义类的方法?A. privateB. publicC. protectedD. internal3. 在C中,下列哪个关键字用于实现继承?A. virtualB. overrideC. sealedD. abstract4. 在C中,下列哪个关键字用于限制某个类的成员只能被同一类中的其他成员访问?A. privateB. publicC. protectedD. internal5. 在C中,下列哪个关键字用于创建抽象类?A. virtualB. overrideC. sealedD. abstract6. 在C中,下列哪个关键字用于标记某个成员是静态的?A. privateB. publicC. protectedD. internal7. 在C中,下列哪个关键字用于表示数组的长度?A. lengthB. sizeC. lengthD. capacity8. 在C中,下列哪个关键字用于抛出异常?A. throwB. catchC. finallyD. fault9. 在C中,下列哪个关键字用于同步对共享资源的访问?A. lockB. unlockC. sleepD. wait10. 在C中,下列哪个关键字用于定义委托?A. delegateB. eventC. interfaceD. class11. C是一种哪种编程语言?A. 面向过程B. 面向对象C. 函数式编程D. 逻辑编程12. 在C中,什么是类?A. 一种数据类型B. 一种方法C. 一种属性D. 一种代码组织方式13. 在C中,什么是字段?A. 类的成员变量B. 方法内部的变量C. 属性的成员变量D. 构造函数的参数14. 在C中,什么是接口?A. 一种数据类型B. 一种方法C. 一种属性D. 一种代码组织方式15. 在C中,什么是继承?A. 一种数据类型B. 一种方法C. 一种属性D. 一种代码组织方式16. 在C中,什么是多态?A. 一种数据类型B. 一种方法C. 一种属性D. 一种代码组织方式17. 在C中,什么是封装?B. 一种方法C. 一种属性D. 一种代码组织方式18. 在C中,什么是委托?A. 一种数据类型B. 一种方法C. 一种属性D. 一种代码组织方式19. 在C中,什么是事件?A. 一种数据类型B. 一种方法C. 一种属性D. 一种代码组织方式20. 在C中,什么是LINQ?A. 一种数据类型B. 一种方法C. 一种属性D. 一种代码组织方式21. C是一种什么编程语言?A. 面向过程B. 面向对象C. 函数式编程D. 逻辑编程22. 在C中,什么是类?A. 一种数据类型B. 一种代码组织方式C. 一个对象的集合23. 在C中,什么是字段?A. 类的成员变量B. 方法内部的局部变量C. 类的静态成员变量D. 对象的内部成员变量24. 在C中,什么是方法?A. 类的成员函数B. 函数库中的函数C. 对象的行为D. 代码块25. 在C中,什么是属性?A. 类的成员变量B. 方法内部的局部变量C. 访问或修改类成员的方法D. 代码块26. 在C中,什么是索引器?A. 类的成员变量B. 方法内部的局部变量C. 访问或修改类成员的方法D. 代码块27. 在C中,什么是委托?A. 一种数据类型B. 一种代码组织方式C. 一个对象的集合D. 一个函数库28. 在C中,什么是事件?B. 一种代码组织方式C. 一个对象的集合D. 一个函数库29. 在C中,什么是继承?A. 一种数据类型B. 一种代码组织方式C. 一个类可以继承另一个类的特性D. 一个类可以继承另一个类的功能30. 在C中,什么是多态?A. 一种数据类型B. 一种代码组织方式C. 同一个接口可以被不同的类实现D. 一个类可以有多个基类31. 关于C语言中面向对象编程的描述,以下哪个是正确的?A. C#支持继承和多态B. C#支持封装和多态C. C#支持继承和封装D. C#只支持封装32. 在C中,以下哪个关键字用于定义类?A. classB. structC. interfaceD. delegate33. 在C中,以下哪个关键字用于定义属性(Accessors)?A. publicB. privateC. protectedD. virtualA. publicB. privateC. protectedD. virtual35. 在C中,以下哪个关键字用于实现接口?A. implementsB. extendsC. implementsD. extends36. 在C中,以下哪个关键字用于访问类的成员?A. thisB. baseC. staticD. void37. 在C中,以下哪个关键字用于创建对象实例?A. newB. createC. instanceD. newinstance38. 在C中,以下哪个关键字用于抛出异常?A. throwB. catchC. finallyD. fault39. 在C中,以下哪个关键字用于同步代码块?A. lockB. syncC. beginD. commitA. staticB. constC. virtualD. abstract二、问答题1. 什么是面向对象编程(OOP)?2. 在C中,类和对象有什么区别?3. 什么是封装?在C中如何实现封装?4. 什么是继承?在C中如何实现继承?5. 什么是多态?在C中如何实现多态?6. 在C中,如何使用LINQ技术查询数据?7. 什么是委托?在C中如何使用委托?8. 什么是异常处理?在C中如何处理异常?参考答案选择题:1. A2. B3. D4. A5. D6. C7. C8. A9. A 10. A11. B 12. A 13. A 14. A 15. D 16. D 17. D 18. B 19. D 20. D21. B 22. A 23. A 24. A 25. C 26. D 27. C 28. D 29. C 30. C31. A 32. A 33. D 34. D 35. A 36. A 37. A 38. A 39. A 40. A问答题:1. 什么是面向对象编程(OOP)?面向对象编程是一种编程范式,它使用“对象”来设计软件。
c面向对象程序设计期末考试题及答案一、选择题(每题2分,共20分)1. 在C++中,以下哪个关键字用于定义类?A. structB. typedefC. enumD. union答案:A2. 以下哪个选项不是面向对象编程的三大特性?A. 封装B. 继承C. 多态D. 抽象答案:D3. 在C++中,构造函数的作用是什么?A. 初始化局部变量B. 初始化成员变量C. 销毁对象D. 计算对象的值答案:B4. 下列哪个关键字用于实现类的继承?A. extendsB. implementsC. inheritsD. public答案:D5. 在C++中,友元函数可以访问类的哪些成员?A. 公有成员B. 私有成员C. 保护成员D. 所有成员答案:D6. 下列关于虚函数的描述,哪个是正确的?A. 虚函数不能在基类中定义B. 虚函数不能在派生类中重写C. 虚函数可以用于实现多态D. 虚函数不能在接口类中定义答案:C7. 在C++中,下列哪个关键字用于定义纯虚函数?A. abstractB. virtualC. overrideD. final答案:B8. 下列关于静态成员的描述,哪个是错误的?A. 静态成员变量可以在类外初始化B. 静态成员函数可以访问类的非静态成员C. 静态成员属于类本身D. 静态成员函数不能访问类的静态成员答案:B9. 在C++中,下列哪个关键字用于定义常量成员函数?A. constB. staticC. finalD. abstract答案:A10. 下列关于运算符重载的描述,哪个是正确的?A. 运算符重载不能改变运算符的优先级B. 运算符重载可以改变运算符的结合性C. 运算符重载可以改变运算符的操作数数量D. 运算符重载可以改变运算符的类型答案:A二、填空题(每题2分,共20分)1. 在C++中,使用关键字________定义类。
答案:class2. 面向对象编程的三大特性包括封装、继承和________。
《面向对象程序设计》综合复习题集四、程序填充1. 斐波那契数列的第1和第2个数分别为0和1 ,从第三个数开始,每个数等于其前两个数之和。
求斐波那契数列中的前20个数,要求每行输出5个数。
#include<iostream.h>void main() {int f,f1,f2,i;cout<<”斐波那契数列:\n”;f1=0; f2=1;cout<<setw(6)<<f1<<setw(6)<<f2;for(i=3;i<=20;i++) {f=______(1)______;cout<<setw(6)<<f;if(_____(2)______) cout<<endl;f1=f2;f2=____(3)_______;}cout<<endl;}(1) (2) (3)2. 计算∑=+ -10 11!)1(iiiix的值。
#include<iostream.h>void main(){double x,p1=1,p2=1,s=0;int i,j=1;cout<<"输入x的值:";cin>>x;for(i=1;i<=10;i++) {p1*=___(1)_____;p2*=____(2)____;s+=j*p1/p2; //j的值为(-1)i+1j=____(3)____;}cout<<s<<endl;}(1) (2) (3)17. 假定有定义为“struct NODE{int data; NODE* next;};”,下面算法根据table 数组中的n个元素建立一个表头指针为L的链表,链表中结点值的顺序与数组元素值的顺序相同。
void f5(NODE*& L, int table[], int n){if(n<=0) {L=NULL; return;}L=new NODE; //生成附加的头结点int i=0;NODE* p=L;while(___(1)___) {p=p->next=___(2)___;p->data=___(3)___;i++;}p->next=NULL; //把最后一个结点的指针域置空p=L;L=L->next; //使L指向链表的第一个带值的结点delete p;}(1) (2) (3)22. 已知一维数组类ARRAY的定义如下,构造函数的作用是把参数n的值赋给s,给v 动态分配长度为n的数组空间,接着利用数组参数a初始化v所指向的数组。
一、填空题(每空1分,共14分)1、观看以下程序:classpoint{public:voidshow({cout<<”point”<};voidmain({pointp1;point*p;p=&p1;_______________//经过对象p1接见show函数______________//经过指针p接见show函数}2、在C++类中可以包括______________、______________和______________三种拥有不相同接见控制权的成员。
3、定义类时,在类头中将使用要点字_____________来表示类定义的开始。
4、若是一个类中最少有一个纯虚函数,则该类称为________________。
5、C++类的组成包括数据成员和______________,友元_____(是、不是)该类的成员函数。
6、友员函数是用要点字____________修饰的非成员函数。
7、若有:inti;int&j=i;i=10;j=i+1;则i=__________,j=__________。
8、new的功能是____________________,delete的功能是____________________。
二、选择题(每题分,共30分1、以下特点中不是面向对象程序设计语言所特有的是()。
(A)数据封装(B)继承(C)多态性(D)模板2、()是给变量取一个别名,它引入了变量的赞成词。
(A)指针(B)引用(C)列举(D)构造3、类成员的接见权限中,()只能被本类的成员函数和其友元函数接见。
(A)share(B)public(C)private(D)protected4、关于构造函数,以下说法不正确的选项是()。
(A)构造函数名字和类名相同(B)构造函数在创办对象时自动执行(C)构造函数无任何函数返回种类(D)构造函数有且只有一个5、派生类可以接见其基类的()。
面向对象程序设计复习题一、单项选择题D •析构函数不能是虚函数4.友元的作用之一是7.下面关于友元的描述中,错误的是 __________ 。
(D)A. 友元函数可以访问该类的私有数据成员B. 一个类的友元类中的成员函数都是这个类的友元函数C. 友元对以提高程序的运行效率D. 类与类之间的友元关系可以继承&在C++中, ________ 运算符不能重载。
(B)C •一 9. _________________________________ 下列关于运算符重载的描述中, 是正确的。
(D)A.运算符重载可以改变操作数的个数 B.运算符重载可以改变优先级C.运算符重载可以改变结合性D.运算符重载不可以改变语法结构 10. 在下列函数原型中,可以作为类AA 构造函数的是 __________ (D)A. void AA(int);B. int AA();C. AA(int)const;D. AA(int);11. 在声明类时,下面的说法正确的是 ________ 。
(0A. 可以在类的声明中给数据成员赋初值B. 数据成员的数据类型可以是registerC. private, public, protected 可以按任意顺序出现D. 没有用private, public, protected 定义的数据成员是公有成员1•下面关于对象概念的描述中, 是错误的。
(B)A.对象代表着正在创建的系统中的一个实体B.对象就是C 语言中的结构体变量C.对彖是一个状态和操作(或方法)的封装体 2.继承机制的作用是: ___________ © A.信息隐藏 B.数据封装D.对彖之间的信息传递是通过消息进行的C. 定义新类D.数据抽象 3.有关析构曲数的说法不正确的是 (D)A •析构函数有且只有一个B •析构凶数无任何两数类型C •析构曲数没有形参 A.提高程序的运行效率加强类的封装性 C.实现数据的隐藏性D.增加成员函数的种类 5•通常拷贝构造曲数的参数是o (0 A ・某个对彖名 B.某个对彖的成员名 C.某个对彖的引用名 【)•某个对彖的指针名6•如果在基类中将show 声明为不带返冋值的纯虚函数,正确的写法是o (0 A. virtual show()=0;B. virtual void show();C. virtual void show()=0:D. v oid showO virtual ; 【)・<=12. _______________ 继承具有,即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员。
《面向对象与C++》复习题一、简答题1、简述解释方式与编译方式。
答:编译就是先有目标代码再执行;解释就是一边翻译一边执行。
解释方式是边扫描源程序、边进行翻译,然后执行。
即解释一句、执行一句,不生成目标程序。
这种方式运行速度慢,但在执行中可以进行人机对话,随时改正源程序中的错误。
编译方式是将源程序全部翻译后,生成一个等价的目标程序,对目标程序再进行连接装配后,便得到“执行程序”,最后运行执行程序。
由于源程序一旦编译后不再参与运行,以后每次直接运行执行程序即可,所以运行速度快。
但这种方式不够灵活,每次修改源程序后,哪怕只是一个符号,也必须重新编译、连接;2、简述面向过程的程序设计与面向对象的程序设计。
面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。
通过这些概念面向对象的思想得到了具体的体现。
结构化程序设计又称为面向过程的程序设计。
在面向过程程序设计中,问题被看作一系列需要完成的任务,函数(在此泛指例程、函数、过程)用于完成这些任务,解决问题的焦点集中于函数。
其中函数是面向过程的,即它关注如何根据规定的条件完成指定的任务。
3、什么是拷贝构造函数。
是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。
其唯一的参数(对象的引用)是不可变的(const类型)。
此函数经常用在函数调用时用户定义类型的值传递及返回。
拷贝构造函数要调用基类的拷贝构造函数和成员函数。
如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。
4、重写与重载的区别。
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
1、面向对象程序设计将描述事物的数据与封装在一起,作为一个相互依存、不可分割的整体来处理。
A) 信息B) 数据隐藏C) 对数据的操作D) 数据抽象2、下列语句中,错误的是。
A) int *p=new int(5);B) int *p=new int[5];C) int *p=new int [20][(0);D) int *p=new int;3、下面有关类和对象的说法中,正确的是。
A) 系统为类和对象分配内存空间B) 类和对象没有区别C) 系统为类分配存储空间,不为对象分配存储空间D) 类与对象的关系和数据类型与变量的关系类似4、下列有关类和对象的说法中,不正确的是。
A) 任何一个对象只能属于一个类B) 对象是类的一个实例C) 类实质上是一种数据类型D) 一个类只能有一个对象5、下列说法中,不正确的是。
A) 要在类的外部直接使用类的私有成员是错误的B) 一个对象数组中的所有数组元素属于同一个类C) 当在类外部定义成员函数时,必须在函数名前加上类名和作用域运算符D) 同一个类的两个对象占用相同的内存空间6、在声明类时,下面的说法正确的是。
A) 数据成员的数据类型可以是registerB) 可以在类的声明中给数据成员赋初值C) 没有用private,public,protected定义的数据成员是公有成员D) 定义时,private,public,protected可以按任意顺序出现7、下列关于构造函数的描述中,正确的是。
A) 构造函数必须带有参数B) 构造函数可以带有返回值C) 构造函数的名字与类名完全相同D) 构造函数必须定义,不能默认8、下列有关析构函数叙述中,不正确的是。
A) 析构函数必须与类名相同,并在其前面加上符号~,以便和构造函数名区别B) 析构函数不能带有任何参数,不能有返回值C) 析构函数可以重载D) 对于全局定义的对象,在程序开始时调用构造函数,到程序结束时调用析构函数9、关于成员函数特征的下列叙述中,是错误的。
c面向对象程序设计考试试题一、单项选择题(每题2分,共20分)1. 在面向对象编程中,封装的主要目的是:A. 提高代码的可读性B. 隐藏对象的内部状态和实现细节C. 增加对象的可访问性D. 减少对象的内存占用2. 下列关于继承的描述,错误的是:A. 继承可以提高代码的复用性B. 继承可以实现多态性C. 继承是一种“强耦合”关系D. 继承可以实现代码的扩展和修改3. 在Java中,一个类可以继承几个其他类:A. 只能继承一个类B. 可以继承多个类C. 可以继承任意数量的类D. 不能继承任何类4. 下列哪个关键字在C++中用于定义抽象类:A. classB. abstractC. virtualD. interface5. 在面向对象编程中,多态性的主要优点是:A. 减少程序的复杂性B. 提高程序的运行效率C. 增加程序的内存消耗D. 减少程序的可读性6. 在Java中,下列哪个修饰符可以将一个方法的访问级别限制为仅在定义它的包内可见:A. privateB. default(即无修饰符)C. protectedD. public7. 下列关于接口的描述,正确的是:A. 接口可以包含具体实现的方法B. 接口中的方法默认都是public的C. 一个类可以实现多个接口D. 一个接口可以继承另一个接口8. 在C++中,下列哪个特性可以用来实现运行时多态:A. 函数重载B. 虚函数C. 模板D. 宏定义9. 下列哪个不是面向对象编程的基本特征:A. 封装B. 继承C. 多态D. 过程化10. 在设计类的时候,下列哪个原则提倡应该追求尽可能高的内聚和尽可能低的耦合:A. 单一职责原则B. 开闭原则C. 里氏替换原则D. 高内聚低耦合原则二、简答题(每题10分,共30分)1. 请简述面向对象编程中的“组合”和“聚合”的区别,并给出各自的应用场景。
2. 解释什么是设计模式,并至少列举三种常见的设计模式及其主要特点。
面向对象程序设计复习题一、单项选择题1.下面关于对象概念的描述中,_______是错误的;BA.对象代表着正在创建的系统中的一个实体B.对象就是C语言中的结构体变量C.对象是一个状态和操作或方法的封装体D.对象之间的信息传递是通过消息进行的2. 继承机制的作用是: CA.信息隐藏B.数据封装C.定义新类D.数据抽象3.有关析构函数的说法不正确的是_________DA.析构函数有且只有一个B.析构函数无任何函数类型C.析构函数没有形参D.析构函数不能是虚函数4.友元的作用之一是__________AA.提高程序的运行效率B.加强类的封装性C.实现数据的隐藏性D.增加成员函数的种类5.通常拷贝构造函数的参数是__________;CA.某个对象名B.某个对象的成员名C.某个对象的引用名D.某个对象的指针名6.如果在基类中将show声明为不带返回值的纯虚函数,正确的写法是________;Cshow=0; void show;void show=0; show=0 virtual;7.下面关于友元的描述中,错误的是_________;DA.友元函数可以访问该类的私有数据成员B.一个类的友元类中的成员函数都是这个类的友元函数C.友元可以提高程序的运行效率D.类与类之间的友元关系可以继承8.在C++中,_________运算符不能重载;BA. +B.: D.<=9.下列关于运算符重载的描述中,________是正确的;DA.运算符重载可以改变操作数的个数B.运算符重载可以改变优先级C.运算符重载可以改变结合性D.运算符重载不可以改变语法结构10. 在下列函数原型中,可以作为类AA构造函数的是_________DA.void AAint ; B.int AA ; C.AAintconst; D.AAint;11.在声明类时,下面的说法正确的是_________;CA.可以在类的声明中给数据成员赋初值B.数据成员的数据类型可以是register,public,protected可以按任意顺序出现D.没有用private,public,protected定义的数据成员是公有成员12.继承具有________,即当基类本身也是某一个类的派生类时,底层的派生类也会自动继承间接基类的成员;BA.规律性B.传递性C.重复性D.多样性13.在多重继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规则___________;AA.完全相同B.完全不同C.部分相同,部分不同D.以上都不对14.对虚函数的调用__________;DA.一定使用动态联编B.必须使用动态联编C.一定使用静态联编D.不一定使用动态联编15.关于成员函数特征的下述描述中,_______是错误的;AA.成员函数一定是内置函数B.成员函数可以重载C.成员函数可以设置参数的默认值D.成员函数可以是静态的16. 下面关于c++语言变量的叙述错误的是_______BA.在c++语言中变量分为auto,static,extern和register四种存储类型B.自动变量和外部变量的作用域为整个程序C.内部变量的作用域是定义它的函数D.外部静态变量的作用域是定义它的文件17.下列的各类函数中,_______不是类的成员函数;CA.构造函数B.析构函数C.友元函数D.拷贝构造函数18. 有如下类声明:class Foo {ing bar ;};则Foo类的成员bar是_________CA.公有数据成员B.公有成员函数C.私有数据成员D.私有成员函数19.下列表示引用的方法中,__________是正确的;已知:int m=10; DA. float &t=&m; &y=10; &z; D. int &x=m;20.设置虚基类的目的是________;BA.简化程序B.消除二义性C.提高运行效率D.减少目标代码21.对于类中定义的成员,其隐含访问权限为________B22.关于类和对象不正确的说法是________ BA.类是一种类型,它封装了数据和操作B.一个类的对象只有一个C.对象是类的实例D.一个对象必属于某个类23.声明一个类的对象时,系统自动调用一个函数___c___;撤消对象时,系统自动调用一个函数;该函数为___c___A.成员函数;构造函数B.复制构造函数;析构函数C.构造函数;析构函数D.析构函数;复制构造函数24.当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的__A______ 成员成员成员 D.友元25.在C++中,要实现动态联编,必须使用_____D___调用虚函数A.类名B.派生类指针C.对象名D.基类指针26.若一个类中含有纯虚函数,则该类称为____A____A. 抽象类B. 纯基类C.派生类D. 基类27.下列关于this指针的叙述中,正确的是___D_____A.任何与类相关的函数都有this指针B.类的成员函数都有this指针C.类的友元函数都有this指针D.类的非静态成员函数才有this指针28.有如下类声明:class Book {int num ;};则Book类的成员num是___D_____A.公有数据成员B.公有成员函数C.私有数据成员D.私有成员函数29.下面有关重载函数的说法中正确的是___C_____A.重载函数必须具有不同的返回值类型;B.重载函数形参个数必须不同;C重载函数必须有不同的形参列表; D.重载函数名可以不同;30.设置虚基类的目的是___A_____A.消除二义性B.简化代码C.提高运行效率D.减少目标代码31.在C++语言程序中,对象之间的相互通信通过___B_____A.继承实现B.调用成员函数实现C.封装实现D.函数重载实现32.下列运算符中,在C++语言中不能重载的是__C______A. B.>= C.:: D./33.下面对友元函数描述正确的是___C_____A.友元函数的实现必须在类的内部定义B.友元函数是类的成员函数C.友元函数破坏了类的封装性和隐藏性D.友元函数不能访问类的私有成员34.下面叙述不正确的是___A_____A.基类的保护成员在派生类中仍然是保护成员B.基类的保护成员在公有派生类中仍然是保护成员C.基类的保护成员在私有派生类中是私有成员D.对基类成员的访问必须是无二义性35.下面对静态数据成员的描述中,正确的是___D_____A.静态数据成员可以在类体内进行初始化B.静态数据成员不可以被类的对象调用C.静态数据成员不能受private控制符的作用D.静态数据成员可以直接用类名调用36.在C++类语言体系中,不能被派生类继承的有_______BA.转换函数B.构造函数C.虚函数D.静态成员函数37.在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是____C____A.友元函数B.虚函数C.构造函数D.析构函数38.下列关于虚基类的描述中,错误的是_B_______A.设置虚基类的目的是为了消除二义性;B.虚基类的构造函数在非虚基类之后调用;C.若同一层包含多个虚基类,这些基类的构造函数按照它们的次序调用;D.若虚基类由非基类派生而来,则仍然先调用基类构造函数,再用派生类的构造函数;39.考虑函数原型voidtestinta,int b=7,char="",下面的函数调用中,属于不合法调用的是___C_____A. test5 5,8 6,"" 0,0."";40.下列关于构造函数的描述中,错误的是___D_____A.构造函数可以设置默认参数;B.构造函数在定义类对象时自动执行C.构造函数可以是内联函数;D.构造函数不可以重载41.在重载一个运算符时,如果其参数表中有一个参数,则说明该运算符是 ; DA.一元成员运算符 B.二元成员运算符 C.一元友元运算符 D.选项B和选项C都可能42.在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是 ; CA.派生类的对象可以赋给基类的对象 B.派生类的对象可以初始化基类的引用C.派生类的对象可以直接访问基类中的成员 D.派生类的对象的地址可以赋给指向基类的指针43.下面关于虚函数的描述,错误的是 ; BA.在成员函数声明的前面加上virtual修饰,就可把该函数声明为虚函数B.基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数C.虚函数可以是另一个类的友元函数,但不能是静态成员函数D.基类中说明的纯虚函数在其任何派生类中都必须实现44.定义派生类时,若不使用关键字显示地规定采用何种继承方式,则默认方式为 ; AA.私有继承 B.非私有继承 C.保护继承 D.公有继承45.有如下程序:includeusing namespace std;class ONE{int c;public:ONE:c0{cout<<1;}ONEint n:cn{cout<<2;}};class TWO{ONE onel;ONE one2;public:TWOint m:one2m{cout<<3;}};int main{TWO t 4 ;return 0 ;}运行时的输出结果是 ; CA.3B.23C.123D.21346.关于静态数据成员的描述中正确的是DA类的静态数据成员不是类的所有对象共享的数据B类的静态数据成员不能被类的成员函数调用C类的静态数据成员不能被类的构造函数调用D类的静态数据成员必须进行初始化47下面正确的是,在父类中的访问属性访问修饰符在子类中的访问属性CApublic,private不能直接访问 Bprotect,public,publicCprivate,public不能直接访问 Dprotect,private,protect48类A是类B的友元,类B是类C的友元,则下列说法正确的是DA类B是类A的友元B类C是类A的友元C类A是类C的友元D以上都不对49下列关于构造函数说法不正确的是CA构造函数必须与类同名 B构造函数可以省略不写C构造函数必须有返回值 D在构造函数中可以对类中的成员进行初始化50.类的析构函数的作用是DA一般成员函数的初始化 B类的初始化C对象的初始化D删除类创建的对象51.下列说法正确的是BA内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方B内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方C类的内联函数必须在类体内定义D类的内联函数必须在类体外通过加关键字inline定义52.下面对静态数据成员的描述中,正确的是DA静态数据成员可以在类体内进行初始化B静态数据成员不可以被类的对象调用C静态数据成员不能受private控制符的作用D静态数据成员可以直接用类名调用二、知识点1.实现运行时的多态性要使用虚函数;2.如果一个类至少有一个纯虚函数,那么就称该类为抽象类;3. 运算符重载不能改变操作符的个数、运算符的优先级、运算符的结合性和运算符的语法结构;4. 构造函数是一种特殊的成员函数,它主要用来为对象分配内存空间,对类的数据成员进行初始化并执行对象的其他内部管理操作;5. 静态成员函数不能直接引用类中说明的非静态成员;6. 引用是给对象取一个别名,它引入了对象的同义词;7.设置友元函数的目的是为能够访问该类的私有成员;8.运算符重载仍然保持原来的优先级、结合性和语法结构;9.基类的私有成员不能被派生类的成员访问;10.静态联编支持的多态性称为编译时的多态性,也称静态多态性;11.任何类中允许有三种访问权限的数据,这三种访问权限分别是public、private、protected;12.为了满足运算符“+”的可交换性,必须将其重载为友元函数;13.对于含有对象成员的派生类,其构造函数的执行顺序为:先执行基类的构造函数、再执行对象成员的构造函数,后执行派生类的构造函数;14.利用成员函数对双目运算符重载,其左操作数为this指针指出的对象,右操作数为成员函数参数;++允许在相同的作用域内以相同的名字定义几个不同实现的函数,称这种同一个函数名多个含义的现象为函数重载;16.通过使用new和delete两个运算符进行的分配为动态存储分配;17.当类定义中有数据成员为指针时,解决浅拷贝出现的运行错误的方法是编写拷贝构造函数;18.如果使用protected继承基类,其公有成员就会变成派生类的保护成员,其保护成员就会变成派生类的保护成员,其私有成员不能继承19.一个函数功能不太复杂但要求被频繁调用,应定义为内联函数;20.抽象类只能作为基类使用,而不能声明它的对象;21.构造函数可以重载,析构函数不可以重载;22.静态成员函数没有this指针;23.类有两个特殊的成员函数构造函数和析构函数;24.在表达式x+yz中,+是作为成员函数重载的运算符,是作为非成员函数重载的运算符;其中operator+有一个参数,operator有两个参数;25.一个派生类只有一个基类的情况称为单继承,而有多个直接基类的情况称为多继承;26.调用析构函数的次序正好与调用构造函数的次序相反;27. 非成员函数应说明为类的友元函数才能访问这个类的private成员;28. 通过使用new和delete两个运算符进行的分配为动态存储分配;29.如果类B继承了类A,则称类A为类B的基类,类B称为类A的派生类30. 表达式operator+x,y还可以表示为x+y ;31 C++语言中的多态性分为编译时的多态性和运行时的多态性;32将x+yz中的"+"用成员函数重载,""用友元函数重载,应解释为x. operator+operatory,z33如果要把返回值为void的函数A声明为类B的友元函数,则应在类B的定义中加入的语句是friend void A ;34派生类的成员一般分为两部分,一部分是从基类继承的成员,另一部分是自己定义的新成员;35继承的方式有公有继承、私有继承和保护继承3种;。
一、单选题(每小题2分,共30分)1. C++源程序文件的缺省扩展名为( A )。
A. cppB. exeC. objD. lik2. 设”int a=12;”,则执行完语句”a+=a*a;”后,a的值是( )。
A. 12B. 144C. 156D. 2883. 设”int a=15,b=26;”,则”cout<<(a,b);”的输出结果是( )。
A. 15B. 26,15C. 15,26D. 264. 字符串”a+b=12\n”的长度为()。
A. 6B. 7C. 8D. 95. 假定下列x和y均为int型变量,则不正确的赋值为()。
A. x+=y++B. x++=y++C. x=++yD. ++x=++y6. 下列的符号常量定义中,错误的定义是()。
A.const M=10;B.const int M=20;C.const char ch;D.const bool mark=true;7. 下列()的调用方式是引用调用。
A. 形参和实参都是变量B.形参是指针,实参是地址值C. 形参是引用,实参是变量D.形参是变量,实参是地址值8. 采用重载函数的目的是()。
A. 实现共享B. 减少空间C. 提高速度D. 使用方便,提高可读性9. 在一个类的定义中,包含有()成员的定义。
A. 数据B. 函数C. 数据和函数D. 数据或函数10. 在类作用域中能够通过直接使用该类的()成员名进行访问。
A. 私有B. 公用C. 保护D. 任何11. 在关键字public后面定义的成员为类的()成员。
A. 私有B. 公用C. 保护D. 任何12. 在关键字private后面定义的成员为类的()成员。
A. 私有B. 公用C. 保护D. 任何13. 类的构造函数是在定义该类的一个( )时被自动调用执行的。
A. 成员函数B. 数据成员C. 对象D. 友元函数14. 类的析构函数是一个对象被( )时自动调用的。
A. 建立B. 撤消C. 赋值D. 引用15. 对类对象成员的初始化是通过构造函数中给出的( )实现的。
A. 函数体B. 初始化表C. 参数表D. 初始化表或函数体16. 程序中主函数的名字为()。
A. mainB. MAINC. MainD. 任意标识符17. 设x是一个bool型的逻辑量,y的值为10,则表达式 x && y的值为()。
A. 1B. 0C. 与x值相同D. 与x值相反18. 假定下列x和y均为int型变量,则不正确的赋值为()。
A. x+=y++B. x++=y++C. x=++yD. ++x=++y19. 函数调用不可以()。
A.出现在一个表达式中B.出现在执行语句中C.作为一个函数的实参D.作为一个函数的形参20. 采用重载函数的目的是()。
A. 实现共享B. 减少空间C. 提高速度D. 使用方便,提高可读性21. 在一个类的定义中,包含有()成员的定义。
A. 数据B. 函数C. 数据和函数D. 数据或函数22. 在类作用域中能够通过直接使用该类的()成员名进行访问。
A. 私有B. 公用C. 保护D. 任何23. 在关键字private后面定义的成员为类的()成员。
A. 私有B. 公用C. 保护D. 任何24. 当一个类对象离开它的作用域时,系统自动调用该类的( )。
A. 无参构造函数B. 带参构造函数C. 拷贝构造函数D. 析构函数25. 类的析构函数可以带有( )个参数。
A. 0B. 1C. 2D. 任意26. 静态数据成员的初始化是在()中进行的。
A. 构造函数B. 任何成员函数C. 所属类D. 全局区27.当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B 的()。
A.只能是公有成员B.只能是保护成员C.只能是除私有成员之外的任何成员D.具有任何权限的成员28. 在成员函数中进行双目运算符重载时,其参数表中应带有()个参数。
A. 0B. 1C. 2D. 329. 派生类的成员函数可以直接访问基类的()成员。
A. 所有B. 公有和保护C. 保护和私有D. 私有30. 派生类的对象对其基类中()可直接访问。
A.公有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.私有继承的公有成员31.下面对于指针的描述不正确的是( )。
A.指针是地址变量B.指针不能用除0以外的常量赋值C.两个指针变量的加减法无意义D.指针指向不同基类型的变量长度不同32.下面对于析构函数的描述中不正确的是( )。
A.析构函数是内置函数B.析构函数与类名相同C.析构函数不能有参数D.析函数在对象撤销时自动执行33.下列指针用法中错误的是( )。
A. int i;int*ptr=&i;B. int i;int *ptr;i=*ptr;C. int *ptr;ptr=0;D. int i=5;int *ptr;*ptr=i;34.派生类的对象对它的基类成员中什么是可访问的( )?A.公有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.私有继承的公有成员35.在( )情况下适宜采用inline定义内联函数。
A.函数体含有循环语句B.函数体含有递归语句C.需要加快程序的执行速度D.函数代码多、不常调用36.对基类和派生类的关系描述中,错误..的是( )A.派生类是基类的具体化B.基类继承了派生类的属性C.派生类是基类定义的延续D.派生类是基类的特殊化37.如果类A被说明成类B的友元,则( )。
A.类A的成员即类B的成员B.类B的成员即类A的成员C.类A的成员函数不得访问类B的成员D.类B不一定是类A的友元38.定义析构函数时,应该注意( )。
A.其名与类名完全相同B.返回类型是void类型C.无形参,也不可重载D.函数体中必须有delete语句39. C++语言中所有在函数中定义的变量,连同形式参数,都属于( )A.全局变量B.局部变量C.静态变量D.函数40.在公有继承的情况下,基类成员在派生类中的访问权限( )A.受限制B.保持不变C.受保护D.不受保护41.设int a=3,b=4,c=5;表达式(a+b)>c&&b==c的值是( )。
A. 2B. -1C. 0D. 142.下列标识符中,不合法的用户标识符为( )。
A. a#bB. _intC. a_10D. PAd43. .继承机制的作用是( )A.信息隐藏B.数据封装C.定义新类D.数据抽象44.每个类( )构造函数。
A.只能有一个B.只可有公有的C.可以有多个D.只可有缺省的45.通常,拷贝构造函数的参数是( )A.某个对象名B.某个对象的成员名C.某个对象的引用名D.某个对象的指针名46.重载赋值操作符时,应声明为( )函数。
A.友元B.虚C.成员D.多态47.在私有继承的情况下,基类成员在派生类中的访问权限( )。
A.受限制B.保持不变C.受保护D.不受保护48.构造函数不具备的特征的是( )A.构造函数的函数名与类名相同B.构造函数可以重载C.构造函数可以设置默认参数D.构造函数必须指定类型说明49..一个函数功能不太复杂,但要求被频繁调用,选用( )A.内联函数B.重载函数C.递归函数D.嵌套函数50.在C++程序中,对象之间的相互通信通过( )A.继承实现B.调用成员函数实现C.封装实现D.函数重载实现二、填空题(每题2分,共20分)1. 定义一个函数模板要用到的第一个修饰符是______ template _______。
2. 在函数模板的参数中,用class修饰的参数称为_____虚拟类型(或类型)_____参数。
3. 对象将其大部分实现细节隐藏起来,这种机制称为_____封装______。
4. 复杂对象可以由简单对象构成,这种现象称为_____聚合_____。
5. 如果一个派生类的基类不止一个,则这种继承称为______多继承(或多重继承)______。
6. C++支持两种多态性:____编译_____时的多态性和_____运行______时的多态性。
7.对类中对象成员的初始化是通过在构造函数中给出的_______初始化表_______来实现的。
8. 静态数据成员必须在所有函数的定义体外进行_____初始化_____。
9. 重载运算符时,该运算符的_____优先级_____、结合性以及操作符的个数不允许改变。
10. 除了_____赋值_____运算符外,其他重载的运算符都可以被派生类继承。
11. 一个函数的函数体就是一条_____复合____语句。
12.一个函数定义由___函数头_____和____函数体____两部分组成。
13. 在函数模板的参数中,用class修饰的参数称为____虚拟类型(或类型)______参数。
14. 对象将其大部分实现细节隐藏起来,这种机制称为_____封装_____。
15. 基类和派生类的关系称为_____继承_____。
16. 如果一个派生类的基类不止一个,则这种继承称为______多继承(或多重继承)______。
17. 如果一个派生类只有一个唯一的基类,则这样的继承关系称为____单继承______。
18. C++支持两种多态性:_____编译____时的多态性和_____运行_____时的多态性。
19. 静态数据成员必须在所有函数的定义体外进行_____初始化_____。
20. 除了_____赋值_____运算符外,其他重载的运算符都可以被派生类继承。
21.在派生类中实现基类成员的初始化,需要由派生类的构造函数调用___基类的构造函数______________来完成。
22.当建立__类对象时_____,程序自动调用该类的构造函数。
23.定义重载函数时,应在_函数的参数个数、参数类型和返回值_____上有所不同。
24.类是用户定义的类型,具有类类型的变量称作__对象_____。
25.当一个成员函数被调用时,该成员函数的___this指针____指向调用它的对象。
26.拷贝函数通过__构造函数_____使用引用来初始化创建中的对象。
27.如果重载了运算符+,则相应的运算符函数名是operator+________________。
28.在用C++进行程序设计时,最好用_____NEW_____________代替malloc。
29..在单继承和多继承方式中,面向对象的程序设计应尽量使用__单____继承。
30.在C++中,访问一个对象的成员所用的运算符是_____.____,访问一个指针所指向的对象的成员所用的运算符是_____->_____。
三、程序填空题(每空3分,共18分)1. 对数组a[n]按升序进行的选择排序算法void SelectSort(int a[], ___(1)___){int i,j,k;for(i=1;i<n;i++) { //进行n-1次选择和交换k=i-1;for(j=i;j<n;j++)if(a[j]<a[k]) ___(2)___;int x=a[i-1]; a[i-1]=a[k]; ___(3)___;}}(1) int n (2) k=j (3) a[k]=x2.class A {int a,b;public:___(1)___ //定义构造函数,使参数aa和bb的默认值为0,//在函数体中用aa初始化a,用bb初始化b};main() {A *p1, *p2;___(2)___ ; //调用无参构造函数生成由p1指向的动态对象___(3)___ ; //调用带参构造函数生成由p2指向的动态对象,//使a和b成员分别被初始化为4和5}(1) A(int aa=0, int bb=0){a=aa; b=bb;} (2) p1=new A (3) p2= new A(4,5) 3. 斐波那契数列的第1和第2个数分别为0和1 ,从第三个数开始,每个数等于其前两个数之和。