面向对象程序设计复习题
面向对象程序设计期末复习题及答案

C++面向对象程序设计复习试题类型1、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。
15题,每小题2分,共30分) [主要从作业题目中抽出来]2. 填空题。
(10题,每小题3分,共30分)3、阅读程序,写出程序运行结果。
【也称计算题】(3题,每小题5分,共15分)4、程序编制题【也称综合分析题】。
(第1、2题每题8分,第3题9分,共25分) 重点复习内容打*号是重点,打▲号是编程题出题范围* 基本概念,对象,消息,类。
面向对象系统特性,封装性,继承性,多态性。
*▲C++类的构成,类与对象,构造与析构,动态存储,类嵌套。
静态成员,对象数组,友元。
*函数重载。
运算符重载。
*引用定义与引用参数* 基类与派生类的定义。
* 基类及派生类的访问权(含派生类对基类的访问、通过派生类对象对基类的访问)和初始化。
多继承与虚基类。
*多态性与虚函数。
纯虚函数、抽象类。
*▲函数模板。
*▲使用类来定义对象并在程序中的应用题型样题填空题 1. 假定AB为一个类,则执行“AB a[10];”语句时,系统自动调用该类的构造函数的次数为_________。
答案:102.可以用p.a的形式访问派生类对象P的基类成员a,其中a是_________。
答案:公有继承的公有成员3.能作为重载函数的调用的依据是_________。
答案:参数个数、参数类型4.在进行完任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态;其中只能用于检测输入流是否结束状态的操作函数名称是_________答案:eof5.函数重载是指_________。
答案:两个或两个以上的函数取相同的函数名,但形参的个数或类型不同6.在派生类中重新定义虚函数时必须在_________ 方面与基类保持一致。
答案:参数个数阅读程序例题【计算题】1.分析以下程序的执行结果#include<iostream.h>class Sample{int x,y;public:Sample() {x=y=0;}Sample(int a,int b) {x=a;y=b;}~Sample(){if(x==y)cout<<“x=y”<<endl;elsecout<<“x!=y”<<endl;}void disp(){cout<<“x=”<<x<<“,y”=<<y<<endl;}};void main(){Sample s1,s2(2,3);s1.disp();s2.disp();}解:x=0,y=0x=2,y=3x!=yx=y2.分析以下程序的执行结果#include<iostream.h>int add(int x,int y){return x+y;}int add(int x,int y,int z){return x+y+z;}void main(){int a=4,b=6,c=10;cout<<add(a,b)<<,<<add(a,b,c)<<endl; }解:10,20 3.分析以下程序执行结果#include<iostream.h>int add(int x,int y){return x+y;}double add(double x,double y){return x+y;}void main(){int a=4,b=6;double c=2.6,d=7.4;cout<<add(a,b)<<","<<add(c,d)<<endl; }解:10,104.分析以下程序执行的结果#include<iostream.h>class Sample{int x,y;public:Sample(){x=y=0;}Sample(int a,int b){x=a;y=b;}void disp(){cout<<"x="<<x<<",y="<<y<<endl;}};void main(){Sample s1,s2(1,2),s3(10,20);Sample *pa[3]={&s1,&s2,&s3};for(int i=0;i<3;i++)pa[i]->disp();}解:x=0,y=0x=1,y=2x=10,y=20 5. 分析以下程序的执行结果:#include<iostream.h>class base{int n;public:base(){};base (int a){cout << "constructing base class" << endl; n=a;cout << "n= "<< n << endl;}~base() { cout << "destructing base class" << endl; }};class subs : public base{int m;public:subs(int a, int b) : base(a){cout << "constructing sub class "<< endl; m=b;cout << "m= "<< m << endl;}~subs() { cout << "destructing sub class "<< endl; }};void main (){subs s(1,2);}解:constructing base classn= 1constructing sub classm= 2destructing sub classdestructing base class6.分析以下程序的执行结果:#include <iostream.h>class Sample{protected:int x;public:Sample() { x=0; }Sample(int val) { x=val; }void operator++() { x++; }};class Derived:public Sample{int y;public:Derived():Sample(){ y=0; }Derived(int val1,int val2):Sample(val1){ y=val2; }void operator--(){ x--;y--;}void disp(){cout<<"x="<< x << ",y=" << y << endl; }};void main (){Derived d(3,5);d.disp();d++;d.disp ();d--;d--;d.disp();}解:x=3,y=5x=4,y=5x=2,y=37 分析以下程序执行结果:#include <iostream.h>class A{public:A(char *s) { cout << s << endl; }~A() {}};class B:public A {public:B(char *sl,char *s2) :A(sl){cout << s2 << endl;}};class C:public A{public:C(char *sl,char *s2) :A(sl){cout << s2 << endl;}};class D:public B,public C{public:D(char *sl,char *s2,char *s3,char *s4) :B(sl,s2),C(sl,s3){cout << s4 << endl;}};void main (){D d("class A","class B","class C","class D");}解:class Aclass Bclass Aclass Cclass D 补充例题1.分析以下程序的执行结果#include<iostream.h>template <class T>T max(T x,T y){ return (x>y?x:y); }void main(){ cout<<max(2,5)<<“,”<<max(3.5,2.8)<<endl; }解答:5,3.5 2.分析以下程序的执行结果#include<iostream.h>void main(){int a[]={10,20,30,40},*pa=a;int *&pb=pa;pb++;cout<<*pa<<endl;}解答:输出为:20 3.分析以下程序的执行结果#include<iostream.h>template <class T>T abs(T x){ return (x>0?x:-x); }void main(){ cout<<abs(-3)<<“,”<<abs(-2.6)<<endl; }解答:输出为:3,2.64.分析以下程序的执行结果#include<iostream.h>class Sample{char c1,c2;public:Sample(char a){c2=(c1=a)-32;}void disp(){ cout<<c1<<“转换为”<<c2<<endl; } };void main(){Sample a('a'),b('b');a.disp();b.disp();}解答:a转换为Ab转换为B 5.分析以下程序的执行结果#include<iostream.h>void main(){int a;int &b=a; // 变量引用b=10;cout<<“a=”<<a<<endl;} 解答:输出为:a=10 6.分析以下程序的执行结果#include<iostream.h>class Sample{int x;public:Sample(){};Sample(int a){x=a;}Sample(Sample &a){x=a.x++ +10;}void disp(){cout<<“x=”<<x<<endl; }};void main(){ Sample s1(2),s2(s1);s1.disp();s2.disp();}解答:x=3 // ++运算的结果x=12 // 2+107.分析以下程序的执行结果#include<iostream.h>class Sample{int x;public:Sample(){};Sample(int a){x=a;}Sample(Sample &a){x=a.x+1;}void disp(){cout<<“x=”<<x<<endl; } };void main(){ Sample s1(2),s2(s1);s2.disp();}解答:输出为:x=3。
面向对象程序设计复习题

一、单项选择题。
1引入内联函数的主要目的是A)缩短程序代码,少占用内存空间B.既可以保证程序的可读性,又能提高程序的运行效率C)提高程序的执行速度D)使程序的结构比较清晰2重载函数是A)以函数参数来区分,而不用函数的返回值来区分不同的函数B.以函数的返回值来区分,而不用函数参数来区分不同的函数C)参数表完全相同而返回值类型不同的两个或多个同名函数D)参数表和返回值类型都必须是不同的两个或多个同名函数3有函数原型 void fun2 (int *), 下面选项中,正确的调用是A) double x = 2.17。
fun2 (&x)。
C) int a = 15。
fun2 (a*3.14)。
B) int b = 100。
fun2 (& b)。
D) fun2 (256)。
4在C++中,要实现动态联编,必须使用( )调用虚函数。
A) 类名B) 派生类指针 C)对象名D) 基类指针5 在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是A)派生类的对象可以直接访问基类中的所有成员B)派生类的对象可以初始化基类的引用C)派生类的对象可以赋给基类的对象D) 派生类的对象的地址可以赋给指向基类的指针6设置虚基类的目的是A)消除两义性 B) 简化程序C)提高运行效率 D)减少目标代码7关于构造函数,以下说法错误的是A) 构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。
在对象创建时由系统自动调用。
B) 基类的构造函数可以被派生类所继承。
C) 如果程序中未声明,则系统自动产生出一个缺省形式的构造函数。
D) 允许为内联函数、重载函数、带缺省形参值的函数。
8下列关于C++函数的说明中,正确的是A)内联函数就是定义在另一个函数体内部的函数B)函数体的最后一条语句必须是return语句C)标准C++要求在调用一个函数之前,必须先声明其原型D)编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式9 由于常对象不能被更新,因此A)通过常对象只能调用它的常成员函数B)通过常对象只能调用静态成员函数C)常对象的成员都是常成员D)通过常对象可以调用任何不改变对象值的成员函数10下列关于虚函数的说明中,正确的是A)从虚基类继承的函数都是虚函数 B)虚函数不得是静态成员函数C)只能通过指针或引用调用虚函数 D)抽象类中的成员函数都是虚函数11 运算符重载是对已有的运算符赋予多重含义,因此A)可以对基本类型(如int类型)的数据,重新定义“+”运算符的含义B)可以改变一个已有运算符的优先级和操作数个数C)只能重载C++中已经有的运算符,不能定义新运算符D)C++中已经有的所有运算符都可以重载12模板对类型的参数化提供了很好的支持,因此A)类模板的主要作用是生成抽象类B)类模板实例化时,编译器将根据给出的模板实参生成一个类C)在类模板中的数据成员都具有同样类型D)类模板中的成员函数都没有返回值13下列符号中可以用作C++标识符的是A)_radius B)foo~bar C)else D)3room14下列语句中,错误的是A)const int buffer=256。
面向对象程序设计复习题文档

面向对象程序设计考试题型:1)选择题10题,共20分2)填空题10题,共20分3)程序阅读题3题,共15分4)程序填空题,10空,共20分5)简答题3题,共15分6)编程题1题,共10分一、选择题:1.属于C#语言的关键字( )。
A. abstractB. camelC. SalaryD. Employ答案:A2.C#语言中,值类型包括:基本值类型、结构类型和()。
A.小数类型B.整数类型C.类类型D.枚举类型答案:D3. 假定一个10行20列的二维整型数组,下列哪个定义语句是正确的()。
A. int[]arr = new int[10,20]B. int[]arr = int new[10,20]C. int[,]arr = new int[10,20]D. int[,]arr = new int[20;10]答案:C4.在类作用域中能够通过直接使用该类的()成员名进行访问。
A. 私有B. 公用C. 保护D. 任何答案:D5.小数类型和浮点类型都可以表示小数,正确说法:( )A. 两者没有任何区别B. 小数类型比浮点类型取值范围大C.小数类型比浮点类型精度高D. 小数类型比浮点类型精度低答案:C6.能作为C#程序的基本单位是( )。
A. 字符B. 语句C. 函数D. 源程序文件答案:B7. 可用作C#程序用户标识符的一组标识符是( )。
A. void define +WORDB. a3_b3 _123 YNC. for -abc CaseD. 2a DO sizeof答案:B8.引用类型主要有4种:类类型、数组类型、接口类型和()。
A.对象类型B.字符串类型C.委托类型D.整数类型答案:C9.StreamWriter对象的下列方法,可以向文本文件写入一行带回车和换行的文本的是()。
A.WriteLine()B.Write()C.WritetoEnd()D.Read()答案:A10.建立访问键时,如“新建(N)”菜单中的“N”键,需在菜单标题的字母前添加的符号是( )。
面向对象设计单项选择复习题

面向对象程序设计期末综合练习一(单选题)单选题1. C++源程序文件的缺省扩展名为( )。
A. cppB. exeC. objD. lik2. 由C++源程序文件编译而成的目标文件的缺省扩展名为( )。
A. cppB. exeC. objD. lik3. 编写C++程序一般需经过的几个步骤依次是( )。
A. 编译、编辑、连接、调试B. 编辑、编译、连接、调试C. 编译、调试、编辑、连接D. 编辑、调试、编辑、连接4. 能作为C++程序的基本单位是( )。
A. 字符B. 语句C. 函数D. 源程序文件5. 可用作C++语言用户标识符的一组标识符是( )。
A. void define +WORDB. a3_b3 _123 YNC. for -abc CaseD. 2a DO sizeof6. 程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用( )符号作为分隔符。
A. 空格或逗号B. 逗号或回车C. 逗号或分号D. 空格或回车7. 在一个类的定义中,包含有()成员的定义。
A. 数据B. 函数C. 数据和函数D. 数据或函数8. 在类作用域中能够通过直接使用该类的()成员名进行访问。
A. 私有B. 公用C. 保护D. 任何9. 在关键字public后面定义的成员为类的()成员。
A. 私有B. 公用C. 保护D. 任何10. 在关键字private后面定义的成员为类的()成员。
A. 私有B. 公用C. 保护D. 任何11. 假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为()。
A. x(a)B. x[a]C. x->aD. x.a12. 假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为()。
A. x.aB. x.a()C. x->aD. x->a()13. 假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px 所指对象中数据成员a的格式为()。
面向对象程序设计复习题一

面向对象程序设计复习题一一.名词解释1、构造函数自定义数据类型,由数据成员、方法成员构成,具有封装作用2、对象按照数据类型分配的内存空间,可以实现方法的调用3、运算符重载本质是全局对象,但是纳入到了类的管理4、析构函数负责完成对象的创建和初始化5、组合两个类之间的一种关系,其中一个类拥有另一个类的全部操作和数据二.简答。
1、什么是面向过程设计思想?构造函数;拷贝构造函数;赋值运算符2、比较Java和C++?C++中类和结构体具有同等的功能,唯一区别是类缺省成员属性是private,而结构体缺省为public3、重载的意义?重载的意义在于丰富了动作的多样性,但是并不加重程序员的负担。
4、类和结构体的主要区别是什么?当成员默认属性时,类默认为private,而结构体默认为public5、比较继承与组合。
继承与组合解决的都是复用问题,继承解决的是类似生物遗传的复用,组合描述的是装配关系,当二者皆可用的时候要符合组合优先的原则三.辩析(可以不说出对错但是要给出评价)1、派生类方法可以访问父类的全部成员。
符合里氏替换原则2、静态数据成员是属于类的。
public修饰符号允许外界方法访问本作用域内的成员,因此破坏了封装性3、private继承方式不能产生子类。
private方式派生的类不能完成父类的全部功能,所以不能产生子类。
4、不能实例化的类一定是抽象类。
类的构造函数设为非public属性即不能实例化5、面向对象思想适合解决复杂的问题。
静态数据成员不属于对象,因此在main函数之前构造四.综合回答1. 请介绍运算符重载的意义。
答:函数重载实现了用同名函数处理同类操作的问题,降低了程序员的负担;运算符重载的本质是函数重载;运算符是程序员更熟练内容,也是为了降低程序员的负担;2. 谈谈多态的意义。
答:多态实现了用同一个指针管理继承类树并保证函数调用功能丰富性的特点;3. 面向对象程序设计思想的优点和缺点。
答:可以实现软件复用;可管理性、可重用性、可扩展性;开发周期短;强壮性好。
面向对象程序设计期末复习题资料

面向对象程序设计期末复习题一、单项选择题1.对于类中定义的成员,其隐含访问权限为【 B 】A) public B) private C) static D)protected2.关于类和对象不正确的说法是【 B 】A) 类是一种类型,它封装了数据和操作 B) 一个类的对象只有一个C) 对象是类的实例D) 一个对象必属于某个类3.下面关于对象概念的描述中,【 C 】是错误的。
A)对象代表着正在创建的系统中的一个实体B)对象就是C语言中的结构体变量C)对象是一个状态和操作(或方法)的封装体D)对象之间的信息传递是通过消息进行的4. 使用派生类的主要原因是【 A 】。
A)提高代码的可重用性B)提高程序的运行效率C)加强类的封装性D)实现数据的隐藏5. 有关析构函数的说法不正确的是【D 】A)析构函数有且只有一个B)析构函数无任何函数类型C)析构函数没有形参D)析构函数的作用是在对象被撤消时收回先前分配的内存空间6. 声明一个类的对象时,系统自动调用一个函数;撤消对象时,系统自动调用一个函数;该函数为【 C 】A) 成员函数;构造函数B) 复制构造函数;析构函数C) 构造函数;析构函数D) 析构函数;复制构造函数7. 下列关于运算符重载的描述中,【 D 】是正确的。
A)运算符重载可以改变操作数的个数B)运算符重载可以改变优先级C)运算符重载可以改变结合性D)运算符重载不可以改变语法结构8. 能用友元函数重载的运算符是【 A】。
A)+ B)= C)[] D)->9.当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成员成为派生类的【 A 】A) private成员B) protected成员C) public成员D) 友元10.在C++中,要实现动态联编,必须使用【D】调用虚函数A) 类名B) 派生类指针C) 对象名D) 基类指针11.若一个类中含有纯虚函数,则该类称为【 A 】A) 抽象类B) 纯基类C) 派生类D) 基类12.当使用ifstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式【 B 】A) ios:: out B) ios:: inC) ios::in|ios::out D) ios::binary13.通常拷贝构造函数的参数是【 C 】。
C#面向对象程序设计期末复习题

面向对象程序设计测试题一、单选题1、改变窗体的标题,需修改窗体的什么属性( A )A)Text B)Name C)Title D)Index2、打开代码编辑器的功能键是( C )A)F1 B)F5 C)F7 D)F123、加载窗体时触发的事件是( B )A)Click B)Load C)Gotfocus D)DoubleClick4、设置计时器时间间隔的属性是( C )A)Enabled B)Name C)Interval D)Modifiers5、数据类型为Long的数据在内存中占用几个字节数( D )A) 2 B) 4 C) 4 D) 86、如果要使文本框能够多行显示,则应使什么属性设为True。
( A )A) MultiLine B) MaxLength C) SelLength D) Locked7、图片框控件可显示图像,若想使图片框自动改变大小,以适应装入的图片,应修改SizeMode 属性值为( B )A) Normal B) AutoSize C) StretchImage D) CenterImage8、要使文本框成为密码输入框,一般应修改文本框的什么属性( C )A)PasswordChar属性和MaxLength属性,并且 MultiLine属性值只能为False。
B)PasswordChar属性和MaxLength属性,并且Lines属性值只能为False。
C)只修改PasswordChar属性值就可以了,其他属性可以不修改。
D)PasswordChar属性和MaxLength属性, MultiLine属性值可以为True。
10、以下四组属性中,决定对象的大小的一组属性为:( A )A)width, height B)left, top C)forecolor,backcolor D)right,buttom11、下面哪个控件在程序运行时是不可见的( c )A)单选钮 B)组合框 C)组件 D)框架12、有两个数组s1和s2,要将s1的内容“拷贝”一份给s2,应使用( B )A)s2=s1 B)s2=string.copy(s1) C)s2=s1.Clone D)s2=s1.All13、下面哪种不是循环结构( A )A)Try…Catch…Finally B)For…NextC)For Each…Next D)Do…Loop14、用于专门输入日期时间型数据的控件是(B )A)Timer B)DateTimePicker C)ListBox D)TextBox15、要以表格形式显示数据表,可以使用以下什么控件(B )A)ListBox B)DataGridView C)DataSet D)TextBox16、C#项目文件的扩展名是( B )A) .sln B) .csproj C) .proj D).cs17、C#中,用什么属性标识不同的对象( B )A)Text B)Name C)Title D)Index18、菜单项标题中含有带下划线的字符,这是( B )A)快捷键 B)访问键 C)选取标记 D)菜单禁用19、可以通过改变什么属性,改变复选框的状态( C )A)value B)checked C)style D)appearance20、在C#中,用什么对象来创建弹出式菜单( B )A)Menu B)contextMenustrip C)Menustrip D)Mainmenu21、SQL语句分为三类,分别是:( C )A) create delete modify B) select update editC) DDL DML DCL D) create alter drop22、下面哪种语言不是面向对象程序设计语言( D )A) JAVA B) C# C) D) PHP23、对象的三个基本要素,它们是( B )A)对象的名称、值和所属类 B)对象的属性、事件和方法C)对象的大小、存储方式和内容 D)对象的访问方法、存储方式和名称24、在使用OpenfileDialog对话框控件时,希望通过对话框查找到 (*.txt) 类型的文件和所有文件(*. *),则该控件的filter属性应该如何设置( B )A)文本文件 (*.txt): *.txt; 所有文件 (*. *): *. *B)文本文件 (*.txt)|*.txt|所有文件 (*. *)|*. *C)文本文件 (*.txt)\*.txt\所有文件 (*. *)\*. *D)文本文件 (*.txt)->*.txt; 所有文件 (*. *)->*. *25、要创建多文档应用程序,需要将父窗体的什么属性设置为true ( D )A) DrawGrid B) ShowInTaskbar C) Parent D) IsMdiContainer26、下列不属于容器类控件的是( d )A)Panel控件 B)GroupBox控件 C)TabControl控件 D)listBox控件27、下列对象模型中,用于生成并执行SQL语句的对象是( B )A)Connection对象 B)Command对象 C)DataSet对象 D)DataReader对象28、使用DataSet 类定义数据集对象,应在代码开始处添加对什么命名空间引用。
面向对象程序设计复习总结题(含部分答案)

《面向对象程序设计》复习要点及复习题(一)复习要点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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1《面向对象程序设计》复习题一、单项选择题1. ()是面向对象系统包含的要素。
A、类B、多态C、友元D、重载答案:A2. 下列对常量的定义中,错误的是()。
A、MyClass const obj(3,4);B、char * const p="hello";C、int i=1; const int &ref=i;D、void show() const;答案:C常量的定义:1常对象Const 类名对象名【(实参列表)】类名Const 对象名【(实参列表)】2 常数据成员Const 类型常数据成员3 常成员函数类型成员函数名Const4 指向对象的常指针类名* Const 指针变量名=对象地址5 指向常变量的指针变量Const 类型名* 指针变量名3. 若有如下函数声明:void Fun(int x);,则下列()能与该函数进行重载。
A、void Fun(int y);B、void Fun(int x,int y='1');C、int Fun(int x);D、void Fun(int) const;答案:D4. 下列对构造函数和析构函数的描述中,错误的是()。
A、构造函数可以重载B、析构函数名与类名相同C、构造函数中可以设置参数的缺省值D、类中只有一个析构函数答案:B5. 下列对友元的描述中,错误的是()。
A、友元破坏了类的封装性B、友元提高了程序的运行效率C、友元可以在类外声明和定义D、友元能够访问类中的私有成员答案:C6. 下列对继承的描述中,正确的是()。
A、派生类对象能够访问基类的公有成员B、派生类继承了基类的公有成员和保护成员C、派生类对象不能访问基类的保护成员D、派生类不改变基类成员的访问权限答案:C7. 程序中,编译时出错的语句是()。
class Base{ };class Derived : public Base { };Derived objD1;Base objB=objD1; //ABase *pb=&objD1; //BBase &refB=objD1; //CDerived objD2=objB; //D答案:B8. 下面对派生类的描述中,正确的是()。
A、派生类是对基类的具体化B、一个派生类可以作为另一个派生类的基类C、派生类只能有一个直接基类D、派生类的缺省继承方式是public答案:B9. 实现动态联遍必须通过()调用虚函数。
A、对象引用B、成员名限定C、对象名D、构造函数答案:A10. C++流中重载的运算符>>,是一个()。
A、用于输出操作的非成员函数B、用于输入操作的非成员函数C、用于输出操作的成员函数D、用于输入操作的成员函数答案:B11. ()不是面向对象系统包含的要素。
A、多态B、对象C、类D、继承答案:A12. 下列对常量的定义中,错误的是()。
A、int const size=10;B、char * const p="Good Luck";C、void const print();D、const MyClass obj(10,10);答案:C13. 设Address表示整型变量x的地址,则下列语句执行后的输出结果为()。
int x=100,&r=x;cout<<x<<'-'<<r<<endl;A、Address-100B、100-AddressC、Address-AddressD、100-100答案:D14. 若函数原型为void Fun(int x=9,int y=8,char z='7'),则下列调用错误的是()。
A、Fun()B、Fun(3, '0')C、Fun(1,2)D、Fun(2,4, 'a')答案:B15. 若有如下函数声明:void Fun(int x);,则下列()不能与该函数进行重载。
A、void Fun(int x,int y);B、void Fun(double x);C、void Fun(int x,int y=1);D、void Fun(int x) const;答案:C16. 下列对构造函数和析构函数的描述中,正确的是()。
A、析构函数不可以重载B、构造函数不能定义为内联函数C、构造函数中不能设置参数的缺省值D、析构函数名与类名不同答案:A17. 下面对静态成员的描述中,错误的是()。
A、静态成员的提出是为了解决数据共享问题B、静态数据成员的初始化在类体外进行C、类的不同对象有不同的静态数据成员值D、静态成员函数可以直接访问类中的静态数据成员答案:C18. 下列对友元的描述中,正确的是()。
A、友元可以在类外声明和定义B、友元降低了程序的运行效率C、友元不能访问类中的保护成员D、友元破坏了类的封装性答案:D19. 下列对继承的描述中,错误的是()。
A、派生类对象不能访问基类的保护成员B、派生类对基类成员的访问权限随着继承方式而改变C、派生类成员可以访问基类的私有成员D、派生类继承了基类的所有成员答案:C20. 程序中,编译时出错的语句是()。
class Base{ };class Derived : public Base { };Derived objD1;Base objB=objD1; //ABase *pb=&objD1; //BBase &refB=objD1; //CDerived objD2=objB; //D答案:D21. 下面对派生类的描述中,错误的是()。
A、派生类是对基类的具体化B、派生类能够作为基类继续派生新类C、派生类可以有多个直接基类D、派生类的缺省继承方式是private答案:A22. 实现动态联遍不能通过()调用虚函数。
A、构造函数B、对象引用C、对象指针D、成员函数答案:A23. 下面()不是抽象类的特性。
A、可以说明纯虚函数B、不能说明抽象类的对象C、用做基类,提供公共的接口D、可以定义虚构造函数答案:D24. C++流中重载的运算符<<,是一个()。
A、用于输出操作的成员函数B、用于输出操作的非成员函数C、用于输入操作的成员函数D、用于输入操作的非成员函数答案:B25:下列有关类的说法不正确的是()。
A.对象是类的一个实例B.任何一个对象只能属于一个具体的类C.一个类只能有一个对象D.类与对象的关系和数据类型与变量的关系相似答案:C分析:对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。
26:下面()项是对构造函数和析构函数的正确定义。
A.void X::X(), void X::~X()B.X::X(参数), X::~X()C.X::X(参数), X::~X(参数)D.void X::X(参数), void X::~X(参数)答案:B分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。
27:()的功能是对象进行初始化。
A.析构函数 B. 数据成员 C.构造函数 D.静态成员函数答案:C分析:当一个对象定义时,C++编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C++编译系统自动调用析构函数注销该对象并进行善后工作;28:下列表达方式正确的是()。
A.class P{ B.class P{ public:public:int x=15;int x;void show(){cout<<x;} void show(){cout<<x;} };} C.class P{ D. class P{int f; public:};int a;f=25;void Seta (int x) {a=x;}; 答案:D分析:在类体内不可对数据成员进行初始化;类定义结束时需用分号;只有类中的成员函数才能存取类中的私有数据。
29:拷贝构造函数具有的下列特点中,()是错误的。
A.如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的B.拷贝构造函数只有一个参数,并且是该类对象的引用C.拷贝构造函数是一种成员函数D.拷贝构造函数的名字不能用类名答案:D分析:如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的;拷贝构造函数只有一个参数,并且是该类对象的引用;拷贝构造函数的名字与类同名,并且不被指定返回类型;拷贝构造函数是一种成员函数。
30:关于静态成员的描述中,()是错误的。
A.静态成员可分为静态数据成员和静态成员函数B.静态数据成员定义后必须在类体内进行初始化C.静态数据成员初始化不使用其构造函数D.静态数据成员函数中不能直接引用非静态成员答案:B分析:静态成员可分为静态数据成员和静态成员函数;静态数据成员被定义后,必须对它进行初始化,初始化在类体外进行,一般放在该类的实现部分最合适,也可以放在其他位置,例如,放在主函数前面等;静态数据成员初始化与该类的构造函数和析构函数无关;在静态成员函数的实现中,可以直接引用静态成员,但不能直接引用非静态成员。
31:关于友元的描述中,()是错误的。
A.友元函数是成员函数,它被说明在类体内B.友元函数可直接访问类中的私有成员C.友元函数破坏封装性,使用时尽量少用D.友元类中的所有成员函数都是友元函数答案:A分析:友元函数是非成员函数,在类体内说明了,在类体外定义,定义和调用等同于一般的普通函数;由于它可以直接访问类的私有成员,因此破坏了类的封装性和隐藏性,尽量少用。
二、填空题1. 下列运算符既可以作为类的成员函数重载,也可以作为类的1. 答案: (1) a.operator+(b) (2) operator+(a,b)(3) a.operator++(0) (4) operator –(0)2. 下列程序执行后的输出结果是12,21,22,请将下列程序补充完整。
#include <iostream.h>void fun1((1), int b) { int c; c=a; a=b;b=c; }void fun2((2), int *b) { int c; c=*a; (3);*b=c; }void fun3((4), int b) { int c; c=a; (5);b=c; }void main(){int x,y;x=1; y=2; fun1(x,y); cout<<x<<y<<',';x=1; y=2; fun2(&x,&y); cout<<x<<y<<',';x=1; y=2; fun3(x,y); cout<<x<<y<<endl;}2. 答案: (1) int a (2) int *a (3) *a=*b(4) int &a (5) a=b3. 下列程序执行后的输出结果是B0 D00 B1 D23 ~D ~B ~D~B,请将下列程序补充完整。