2015年北方民族大学面向对象技术及程序设计复习题A(1)
- 格式:doc
- 大小:31.00 KB
- 文档页数:7
研究生院2014-2015学年《面向对象程序设计》考试试卷开卷一、填空(共15分,每空1分)1、编译时的多态性通过__重载__函数实现。
2、面向对象的四个基本特性是_抽象__、__多态性_、__继承性__和_封装性_。
3. 假定AB为一个类,则执行“AB a(2), b[4],*p[4];”语句时调用该类构造函数的次数为__5__。
4.要实现动态联编必须通过对象指针或引用来调用_虚函数_实现。
5.在函数前面用_ inline _保留字修饰时,则表示该函数表为内联函数。
6.如果将一个对象说明为常对象,则通过该对象只能调用它的__公有成员__函数。
7、非成员函数应声明为类的__友元___函数才能访问这个类的private成员。
8、在用class定义一个类时,数据成员和成员函数的默认访问权限是_ 私有____。
9、运算符重载函数可能是类的_友元_函数,也可以是类的_成员_函数,还可以是普通函数。
10、__转换构造函数__函数可以将一个指定的数据转换为类的对象,_类型转换函数_函数实现类的对象转换成其它类型的数据。
二、简答题(共25分,每小题5分)1、什么是类模板,类模板声明的一般形式是什么?答案:类模板是对一批仅仅成员数据类型不同的类的抽象,程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类,(这类可以看作是类模板的实例),从而大大提高编程的效率。
定义类模板的一般形式是:template <类型名参数名1,类型名参数名2,…>class 类名{类声明体};2、有哪几种继承方式?每种方式的派生类对基类成员的继承性如何?答案:继承方式包括:public、private、protected。
3、简述运算符重载的实现方式有哪几种?给出对应的声明语法形式。
答案:(1)类外定义的运算符重载函数格式为:friend <返回类型> operator <op>(<类型> 参数1,<类型> 参数2) { <函数体> }(2)成员运算符重载函数<返回类型> <类名>::operator <op> (<类型> 参数){ <函数体> }4、写出下面程序的输出结果#include<iostream.h>#include<string.h>class Person{}答案:第1次调用类型转换构造函数!第2次调用类型转换构造函数!调用复制构造函数!OldObjectOldObjectNewObject第1次调用析构函数!OldObject第2次调用析构函数!第3次调用析构函数!5. 写运行结果#include <iostream>using namespace std;class A{};答案:(A,B,C,D)= 31,2,3,4三、改错题(共20分,每小题4分)1. 以下程序可动态分配二维数组并释放内存,且可实现二维指针和一维指针复用,试问程序能否正常运行,如不能运行找出原因并改正之。
15秋北交《面向对象的程序设计》在线作业二满分答案一、单选题(共 23 道试题,共 57.5 分。
)1. 下列不合法的变量名为()A. intB. int1C. name_1D. name0正确答案:A2. 下面关于派生类的描述中,()是错的。
A. 一个派生类可以作为另一个派生类的基类B. 派生类至少有一个基类C. 派生类的成员除了它自己的成员外,还包含了它的基类的成员D. 派生类中继承的基类成员的访问权限到派生类保持不变正确答案:D3. 面向对象系统不具有()特性A. 继承性B. 封装性C. 过程性D. 多态性正确答案:C4. 有如下函数模板定义: template T func(T x, T y) { returnx*x+y*y; } 在下列对func的调用中,错误的是( )A. func(3, 5);B. func(3.0, 5.5);C. func (3, 5.5);D. func(3, 5.5);正确答案:C5. 以下保留字()不能出现在说明虚函数原型的语句中。
A. staticB. operatorC. voidD. const正确答案:A6. 下列关于类和对象的叙述中,错误的是( )A. 一个类只能有一个对象B. 对象是类的具体实例C. 类是对某一类对象的抽象D. 类和对象的关系是一种数据类型与变量的关系正确答案:A7. 下列不是C++流对象的是( )。
A. coutB. cinC. cerrD. ostream正确答案:D8. 下面有关重载函数的说法中正确的是()A. 重载函数必须具有不同的返回值类型B. 重载函数形参个数必须不同C. 重载函数必须有不同的形参列表D. 重载函数名可以不同正确答案:C9. 下面关于C++流的叙述中,正确的是( )A. cin是一个输入流对象B. 可以用ifstream定义一个输出流对象C. 执行语句序列char *y="QMN"; cout<D. 执行语句序列char x[80]; cin.getline(x,80); 时,若键入 Happy new year 则x中的字符串是"Happy"正确答案:A10. 假定AB为一个类,则执行“AB a(4) , b[3] , * p[2] ;”语句时,自动调用该类构造函数的次数为()。
面向对象程序设计期末综合练习一(单选题)(精选五篇)第一篇:面向对象程序设计期末综合练习一(单选题)面向对象程序设计期末综合练习一(单选题)单选题1.C++源程序文件的缺省扩展名为(A)。
A.cppB.exeC.objD.lik 2.由C++源程序文件编译而成的目标文件的缺省扩展名为(C)。
A.cpp B.exe C.obj D.lik 3.由C++目标文件连接而成的可执行文件的缺省扩展名为(B)。
A.cpp B.exe C.obj D.lik 7.程序中主函数的名字为(A)。
A.mainB.MAINC.MainD.任意标识符 8.C++程序的基本模块为(D)。
A.表达式B.标识符C.语句D.函数9.可用作C++语言用户标识符的一组标识符是(B)。
A.void define +WORDB.a3_b3 _123 YNC.for-abc CaseD.2a DO sizeof 38.以下说法中正确的是(B)。
A.C++程序总是从第一个定义的函数开始执行B.C++程序总是从main函数开始执行C.C++函数必须有返回值,否则不能使用函数D.C++程序中有调用关系的所有函数必须放在同一个程序文件中39.以下叙述中不正确的是(C)。
A.在一个函数中,可以有多条return语句B.函数的定义不能嵌套,但函数的调用可以嵌套C.函数必须有返回值D.不同的函数中可以使用相同名字的变量40.函数重载是指(A)。
A.两个或两个以上的函数取相同的函数名,但形参的个数或类型不同B.两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同C.两个以上的函数名字不同,但形参的个数或类型相同D.两个以上的函数取相同的函数名,并且函数的返回类型相同 41.以下关于函数模板叙述正确的是(C)。
A.函数模板也是一个具体类型的函数B.函数模板的类型参数与函数的参数是同一个概念C.通过使用不同的类型参数,函数模板可以生成不同类型的函数D.用函数模板定义的函数没有类型42.下列(C)的调用方式是引用调用。
北京化工大学北方学院2010——2011学年第一学期《面向对象程序设计C++》期末考试试卷(A)班级:姓名:学号:分数:试卷说明:本套试题共四个大题,全部题目都答在答题纸上,写在其他地方无效。
(答题纸在本套试卷的第9页上)一、选择题(每小题2分,共40分)1、下列描述中,不属于面向对象思想主要特征的是()。
A. 封装性B. 多态性C. 继承性D. 跨平台2、若定义:string str; 当语句cin>>str; 执行时,从键盘输入:Microsoft Visual Studio 6.0!所得的结果是str=()。
A. Microsoft Visual Studio 6.0!B. MicrosoftC. Microsoft VisualD. Microsoft Visual Studio 6.03、考虑下面的函数原型声明:void test (int a,int b=7,char z='*');下面函数调用中,不合法的是()。
A. test (5);B. test (5,8);C. test (5,'#');D. test (0,0,'*');4、已知函数fun的原型为int fun(int, int, int);下列重载函数原型中错误的是()。
A. char fun(int, int);B. double fun(int, int, double);C. int fun(int, char*);D. float fun(int, int, int);5、下列表示引用的方法中,()是正确的。
已知:int a=1000;A. int &x=a;B. char &y;C. int &z=1000;D. float &t=&a;6、在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用()。
【题目】【题型:单选题】【难度:中】【考核能力:理解】【漏选得分:是】【自动判分:是】【应用类别:终考】【特殊标签:】机器语言中的指令编码为()编码。
[A.]二进制[B.1符号[c.1十进制[D.]数字【答案】A【知识点】01106.1.1.1【解析】无【题目】【题型:单选题】【难度:中】【考核能力:理解】【漏选得分:是】【自动判分:是】【应用类别:终考】【特殊标签:】JaVa语言的主要特点不包括()。
[A.]面向对象[B.]自动垃圾回收[CJ处理文件[D.]可移植性【答案】C【知识点】01106.1.1.1【解析】无【题目】【题型:单选题】【难度:中】【考核能力:理解】【漏选得分:是】【自动判分:是】【应用类别:终考】【特殊标签:】Java开发工具包简称为()。
[A.]JKD[B.]JRK[C.]JDK[D.]JRE【答案】C【知识点】01106.1.1.1【解析】无【题目】【题型:单选题】【难度:中】【考核能力:理解】【漏选得分:是】【自动判分:是】【应用类别:终考】【特殊标签:】具有相同属性和服务的一组对象的模板称为()。
1B.]类[c.1代码[D.]概念【答案】B【知识点】01106.1.1.1【解析】无【题目】【题型:单选题】【难度:中】【考核能力:理解】【漏选得分:是】【自动判分:是】【应用类别:终考】【特殊标签:】类是对具有共同属性和行为的对象的抽象描述,每个对象称为该类的一个()。
[A.]产品[B.1元素[c1成分[D.]实例【答案】D【知识点】01106.1.1.1【解析】无【题目】【题型:单选题】【难度:中】【考核能力:理解】【漏选得分:是】【自动判分:是】【应用类别:终考】【特殊标签:】Java是一门()语言。
[A.]机器[B.]汇编[C.)面向过程的高级[D.]面向对象的高级【答案】D【知识点】01106.1.1.1【解析】无【题目】【题型:单选题】【难度:中】【考核能力:理解】【漏选得分:是】【自动判分:是】【应用类别:终考】【特殊标签:】使用JDK编译JaVa程序时使用的命令是()。
2015~2016学年度第一学期14本《MS面向对象应用技术》期末考试复习提纲一、单项选择题1、键盘事件有哪些?KeyPress KeyUp KeyDown2、数据提供程序的核心对象是什么?数据库3、一个WPF程序会生成哪4个文件?其中包括四个重要的文件,有关它们的说明分别为:文件名称说明App.xamlApplication的设置,通过此文件可以设置应用程序的起始文件和资源App.xaml.cs这个是App.xaml的后台文件,继承System.Windows.Application,用于描述WPF应用程序Window1.xaml 一个WPF窗体的XMAL设计文件。
Window1.xaml.csWindow1.xaml的后台文件,继承自System.Windows.Window,是WPF窗口的实现类4、树视图控件TreeView中,节点左边的加、减号有什么含义?可扩展或缩合其下属子节点5、一般来说,可视化界面中菜单控件提供的是一组什么?一组相关的命令6、中Command对象的方法有哪些?ExecuteNonQuery 返回受SQL语句影响的行数ExecuteReader 使用该方法检索数据,返回DataReader对象ExecuteScalar 返回单个值,如第一行的第一列7、在文件中数据的层次都分成哪些?位→字节(ASCII字符)→域→记录→文件8、图形框的SizeMode属性有哪些枚举值?Normal(正常)、StretchImage(拉伸)、Autosize(自动调整尺寸)、CenterImage(居中排图像)或Zoom(变焦)等9、国际标准化数据库查询语言是什么?写出它的英文全称。
结构化查询语言 Structured Query Language10、提供了哪两个关键组件用来访问和处理数据?NET Framework数据提供程序和数据集(DataSet)11、创建于数据库的连接有哪几个步骤?(1)定义连接字符串:该串包括要连接的数据库提供者的名称、登录信息、要使用的数据库名称。
面向对象程序设计-试卷-A(附答案)本页仅作为文档页封面,使用时可以删除This document is for reference only-rar21year.March2012 --2013学年第二学期《面向对象程序设计》试卷开课单位:计算机学院,考试形式:闭卷,允许带入场对应的答题表格中)1、在类定义的外部,可以被访问的成员有()A、所有类成员B、private的类成员C、public或private的类成员D、public的类成员2、下列关于C++语言类的描述中错误的是( ) 。
A 、类用于描述事物的属性和对事物的操作B、类与类之间通过封装而具有明确的独立性C、类与类之间必须是平等的关系,而不能组成层次结构D、类与类之间可以通过一些方法进行通信和联络3、下列数组定义中,不正确的是()。
A、 int x[1][3];B、 int x[2][2]={1,2,3};C、 int x[2][]={1,2,3,4 };D、 int x[][2]={1,2,3,4 }4、定义析构函数时,应该注意:()A、其名与类名完全相同B、返回类型是void类型C、无形参,也不可重载D、函数体中必须有delete语句5、下列函数中,正确的递归函数是()。
A 、int Fun(int n){ if(n<1) return 1; else return n*Fun(n+1); }B 、int Fun(int n){ if (abs(n)<1) return 1; else return n*Fun(n/2); }C 、int Fun(int n){ if(n>1) return 1; else return n*Fun(n*2); }D、 int Fun(int n){ if(n>1) return 1; else return n*Fun(n-1); }6、在C++中编译器所生成的文件的扩展名为()[答案修改过]A、 .cppB、 .objC、 .libD、 .exe7、派生类的对象对它的基类成员中的()是可以访问A、公有继承的公有成员B、公有继承的私有成员C、公有继承的保护成员D、私有继承的公有成员8. C++设置虚基类的目的是( )A、消除二义性B、简化程序C、提高运行效率D、减少目标代码9. 以下关于this指针的叙述中正确的是:()A、任何与类相关的函数都有this指针;B、类的成员函数都有this指针;C、类的友员函数都有this指针;D、类的非静态成员函数才有this指针;10实现运行时的多态性采用( )A、重载函数B、构造函数C、析构函数D、虚函数11、若有int a[10]={0,1,2,3,4,5,6,7,8,9},*p=&a[5];则( ) 不是对a数组元素的正确引用(其中0≤i<10)A、p[i]B、 *(*(p+i) )C、a[p-a]D、* (&a[i])12、int Func(int,int);不可与下列哪个函数构成重载()A、int Func(int,int,int);B、double Func(int,int);C、double Func(double,double);D、double Func(int,double);13、局部变量可以隐藏全局变量,那么在有同名全局变量和局部变量的情形时,可以用()提供对全局变量的访问。
15春北交《面向对象的程序设计》在线作业一答案辅导资料一、单选题(共23 道试题,共57.5 分。
)V 1. 模板是实现类属机制的一种工具,它的功能非常强大,它是元约束类属机制和约束类属机制的集合,允许用户构造类属函数的是()。
A. 类模板B. 模板类C. 函数模板D. 模板函数满分:2.5 分2. 有如下类声明:class MyBASE{ int k; public: void set(int n){ k=n;} int get( )const{ return k; } }; class MyDERIVED: protected MyBASE{ protected: int j; public: void set(int m, int n){MyBASE::set(m); j=n;} int get( )const{ return MyBASE::get( )+j; } }; 则类MyDERIVEA. 4B. 3C. 2D. 1满分:2.5 分3. 关于new运算符的描述中错误的是()。
A. 用它创建对象和堆对象数组B. 用它创建对象和堆对象数组时要调用相应的构造函数C. 用它创建对象和堆对象数组时可用运算符delete释放D. 用它创建堆对象数组时可指定初始值满分:2.5 分4. 执行语句序列int i=0; while(i >< 25) i+=3; cout< 输出结果是/( )A. 24B. 25C. 27D. 28满分:2.5 分5. 以下保留字()不能出现在说明虚函数原型的语句中。
A. staticB. operatorC. voidD. const满分:2.5 分6. 下面的哪个保留字不能作为函数的返回类型?()A. voidB. intC. newD. long满分:2.5 分7. 关于getline()函数的下列描述中,错误的是()。
A. 该函数中所使用的终止符只能是换行符B. 该函数读取字符串时,遇到终止符时便停止C. 该函数读取的字符串长度是受限制的D. 该函数可以用来从键盘上读取字符串满分:2.5 分8. 关于虚函数的描述中,正确的是()A. 虚函数是一个static类型的成员函数B. 虚函数是一个非成员函数C. 基类中说明了虚函数后,派生类中将其对应的函数可不必说明为虚函数D. 派生类的虚函数与基类的虚函数具有不同的参数个数和类型满分:2.5 分9. 对于语句cin>>x;中各个组成部分,下列叙述中错误的是()。
北京城市学院信息学部考试试卷2014-2015学年第1学期阶段性考试课程名称:面向对象程序设计使用班级:12信本1、2、3 考试时间:45分钟答案:二、程序设计三、程序填空1、2、3、4、5、一、选择题(每小题1分,共14分)1、设Derived类为Base类的子类,则如下对象的创建语句中()是错误的。
A. Base Obj = new Derived();B. Derived Obj = new Base();C. Base Obj = new Base();D. Derived Obj = new Derived();2、欲创建ArrayList类的一个实例,此类继承了List接口,下列()是正确的。
A. ArrayList myList = new Object();B. List myList = new ArrayList();C. ArrayList myList = new List();D. List myList = new List();3、类Student是类Person的子类,Student的构造方法中有一句“super()”,该语句的含义是()A.调用类Student中定义的super()方法B.调用类Person中定义的super()方法C.调用类Person的构造方法D.语法错误4、关于接口下面的说法()是错误的。
A.接口中只有常量和抽象方法B.一个接口可以被一个或多个类实现C.类实现了接口,就必须实现接口中的部分方法D.实现接口的关键字是implements5、关于方法void fgs(int x){ },下面()能成为它的重载。
A. void fgs (int x, int y) { }B. int fgs (int x) { }C. public fgs (int x) { }D. void fg(int x) { }6、如果类Mclass中定义了double型变量x、y,()是Mclass的正确构造方法。
▆■■■■■■■■■■■■《面向对象的程序设计》期末考试A卷姓名:解题通专业:学号: 783284575 学习中心:成绩:一、单选题 (共25题,每题2分,共50分)1、Observer模式不适用于()。
A.当一个抽象模型存在两个方面,其中一个方面依赖于另一方面,将这二者封装在独立的对象中以使它们可以各自独立的改变和复用B.当对一个对象的改变需要同时改变其他对象,而不知道具体有多少个对象有待改变时C.当一个对象必须通知其它对象,而它又不能假定其它对象是谁,也就是说你不希望这些对象是紧耦合的D.一个对象结构包含很多类对象,它们有不同的接口,而想对这些对象实施一些依赖于其具体类的操作2、顺序图由类角色,生命线,激活期和()组成。
A.关系B.消息C.用例D.实体3、UML中类的有三种,下面哪个不是其中之一()A.实体类B.抽象类C.控制类D.边界类4、如果用例A与用例B相似,但A的功能较B多,A的动作序列是通过在B的动作序列中的某些执行点上插入附加的动作序列而构成的,则称()。
A.用例A实现用例BB.用例A继承用例BC.用例A扩展用例BD.用例A包括用例B5、()技术是将一个活动图中的活动状态进行分组,每一组表示一个特定的类、人或部门,他们负责完成组内的活动。
A.泳道B.分叉汇合C.分支D.转移6、关于继承表述错误的是:()。
A.继承是一种通过扩展一个已有对象的实现,从而获得新功能的复用方法B.泛化类(超类)可以显式地捕获那些公共的属性和方法。
特殊类(子类)则通过附加属性和方法来进行实现的扩展C.在一定意义上说破坏了封装性,因为这会将父类的实现细节暴露给子类D.继承本质上是“白盒复用”,对父类的修改,不会影响到子类7、当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用()模式。
A.创建型B.结构型C.行为型D.以上都可以8、类和接口的关系类似于下面哪种类型的关系()。
A.关联(association)和聚集(aggregation)B.关联(association)和组合(composition)C.脚本(scenario)和用例(use case)D.包(Package)和子系统(subsystem)9、如果用例B是用例A的某项子功能,并且建模者确切地知道在A所对应的动作序列中何时将调用B,则称()。
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 class destructing 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。
面向对象的程序设计技术期末试题一、单选题(25分)1 面向对象的程序设计技术中对象有三个最基本的性质,他们分别是:A 封装、继承和多态B 封装、继承和接口C 封装、异常和继承D 抽象、自治和可视化2 关于封装,比较准确的说法是:A 程序不能修改B 程序不能被其它程序调用C 程序语句和变量仅在对象内部生效D 对象之间不能相互通信3 关于对象的最准确的描述是:A 对象是能够显示在屏幕上的有形界面B 对象是程序,数据或者两者的组合C 对象就是一个类D 对象是整数和字符串总称4 对于类最准确的描述是:A 类一般是由一些数据和管理这些数据的一些程序组成的B 类是一组数据C 类是一组对象D 类必须实例化才有效5 下面说法不准确的描述是:A IOException是数据输入输出异常B ArrayIndexOutBoundException是下标出界异常C NumberFormatException是数值格式转换异常D ArithmeticException是中断异常6 关于继承的最准确的描述是:A 继承是相对于父类和子类而言的,对于继承来的子类方法不能改变B 父类可以继承子类的方法C 子类可以继承父类的方法,也可以继承父类的成员变量D子类可以继承父类的方法,但不可以继承父类的成员变量7关于多态的最准确的描述是:A一个类有多个成员变量B一个类有多个方法C一个类中有多个同名的方法D 一个类中有多个引用相同成员变量的方法8关于接口的最准确的描述是:A 接口都是系统提供的B 接口包括特定名称的方法,但这些方法没有具体功能C 接口必须和一个类绑定后才能生效D 接口中的方法必须在绑定到一个类时实现具体功能9关于包的最不准确的描述是:A 包用于划分一些工具组件所在的位置B 包都是由语言系统提供的C 一个包中只能有一个工具组件D 一般在引用一个工具组件是都需要是用import语句指明工具组件所在的包9在面向对象的程序设计技术中,关于方法不准确的说法是:A 方法在一个类的内部函数B 在一个类中最多只能由一个方法C 任何一条语句都必须出现在一个方法中D 类不能没有方法10 一个类一般是由和构成的A 方法和成员变量(域变量)B 接口和菜单C 对象和事件D 包和异常11 在String 类中,用于判定是否等同于另一个字符串的方法是A equalsB substringC charAtD toLowerCase12 在String 类中,用于去除两端空格的方法是:A trimB toUperCaseC valueOfD toString13 在String 类中,用于确定一个特定位置时什么字符的方法是:A charAtB lengthC compareToD indexOf14 在Integer 类中,用于将一个字符串转换成位整数的方法是:A parseIntB parseFloatC toStringD equals15 关于构造方法,不准确的说法是:A 构造方法和类同名B 一个类可以有一个或者多个构造方法C 构造方法是在生成这个类的实例时执行的初始化函数D 构造方法不能继承16 定义一个抽象类的正确语句是:A final class abc{ }B abstract class abc { }C public class abc { }D class abc extends abstract { }17 下面的哪一个不是JAVA语言中有效的类修饰符:A publicB staticC voidD final18静态方法中的修饰符static 嘴准确的说法是:A 该方法不可继承B 该方法不可以重载,即在子类中不能重新改写来自父类的同名方法C 该方法属于类,不属于实例,因此可以不经过实例化就直接引用D 静态变量可以调用类的非静态方法19 在语句public static void main(String aa[] 中,public表示:A 该方法可以被其他类直接调用B 该方法可以被同类内部的其他方法调用,但不能被其他类的任何方法调用C 该方法不能继承D 该方法不能被重写。
2015年北方民族大学面向对象技术及程序设计复习题(A)
一、选择题(2分/题)
1. 编写C++程序一般需经过的几个步骤依次是(B)
A. 编辑、调试、编译、连接
B. 编辑、编译、连接、运行
C. 编译、调试、编辑、连接
D. 编译、编辑、连接、运行
2. 决定C++语言中函数的返回值类型的是(D )
A. return语句中的表达式类型
B. 调用该函数时系统随机产生的类型
C. 调用该函数时的主调用函数类型
D. 在定义该函数时所指定的数据类型
3. 对基类和派生类的关系描述中,错误的是(B)
A. 派生类是基类的具体化
B. 基类继承了派生类的属性
C. 派生类是基类定义的延续
D. 派生类是基类的特殊化
4.所谓多态性是指(B)
A. 不同的对象调用不同名称的函数
B. 不同的对象调用相同名称的函数
C. 一个对象调用不同名称的函数
D.一个对象调用不同名称的对象
5. 假设ClassY:publicX,即类Y是类X的派生类,则说明构造一个Y类的对象时和删除Y类对象时,调用构造函数和析构函数的次序分别为(A)
A. X,Y;Y,X
B. X,Y;X,Y
C. Y,X;X,Y
D. Y,X;Y,X
6. 适宜采用inline定义函数情况是(C)
A. 函数体含有循环语句
B. 函数体含有递归语句
C. 函数代码少、频繁调用
D. 函数代码多、不常调用
7. 假定一个类的构造函数为A(int aa,int bb) {a=aa--;b=a*bb;},则执行A (4,5);语句后,x.a和x.b的值分别为(C )
A. 3和15
B. 5和4
C. 4和20
D. 20和5
8. 下列程序的输出结果是(B )
#include <iostream.h>
void main()
{
int n[][3]={10,20,30,40,50,60};
int (*p)[3];
p=n;
cout<<p[0][0]<<","<<*(p[0]+1)<<","<<(*p)[2]<<endl;}
A. 10,30,50
B. 10,20,30
C. 20,40,60
D. 10,30,60
9. 假定AB为一个类,则执行“AB a(2), b[3],*p[4];”语句时调用该类构造函数的次数为(A)
A. 4
B. 3
C. 5
D. 9
10. 在int a=3,int *p=&a;中,*p的值是(D )
A. 变量a的地址值
B. 无意义
C. 变量p的地址值
D. 3
二、填空题(2分/题)
11. 假设int a=1,b=2;则表达式(++a/b)*b--的值为_____2_______
12. 下面程序的输出结果为_____5______。
#include <iostream.h>
void main()
{
int num=2,i=6;
do
{
i--;
num++;
}while(--i);
cout<<num<<endl;
}
13. 静态成员函数、友元函数、构造函数和析构函数中,不属于成员函数的是___友元函数________。
14. C++语言中如果调用函数时,需要改变实参或者返回多个值,应该采取____传递地址或引用_______方式。
三、简答题
15 .(6分)全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?
生命周期不同:全局变量随主程序创建而创建,随主程序销毁而销毁;局部变量在局部函数内部,甚至局部循环体等内部存在,退出就不存在;
使用方式不同:通过声明后全局变量程序的各个部分都可以用到;局部变量只能在局部使用;分配在栈区。
操作系统和编译器通过内存分配的位置来知道的,全局变量分配在全局数据段并且在程序开始运行的时候被加载。
局部变量则分配在堆栈里面。
16.(6分)引用与指针有什么区别?
1 指针是一个实体,而引用仅是个别名;
2 引用使用时无需解引用(*),指针需要解引用;
3 引用只能在定义时被初始化一次,之后不可变;指针可变;引用“从一而终”
4 引用没有const,指针有const,const的指针不可变;
5引用不能为空,指针可以为空;
6 sizeof引用得到的是指向的变量(对象)的大小,而sizeof指针得到的是指针本身(所指向的变量或对象的地址)的大小;
7 指针和引用的自增运算意义不一样;
17.(6分)解释多态,虚函数,纯虚函数?
18.(6分)C++有哪些性质(面向对象特点)
19.(8分)Struct 和class 的区别。
?
20. (1)(6分)下面的代码有什么问题?
void DoSomeThing(…)
{
char* p;
…
p = malloc(1024); // 分配1K 的空间
if (NULL == p)
return;
…
p = realloc(p, 2048); // 空间不够,重新分配到2K if (NULL == p)
return;
…
}
(2) (8分)写出运行结果:
char str[] = ”world”;
cout << sizeof(str) << ”: ”;
char *p = str;
cout << sizeof(p) << ”: ”;
char i= 10;
cout << sizeof(i) << ”: ”;
void *pp= malloc(10);
cout << sizeof(p) << endl;
}
四、程序设计题
21.(12分)已知交通工具类定义如下。
要求:(1)实现这个类;(2)定义并实现一个小车类car,是它的公有派生类,小车本身的私有属性有载人数,小车的函数有init(设置车轮数,重量和载人数),getpassenger(获取载人数 ),print(打印车轮数,重量和载人数)。
class vehicle
{
protected:
int wheels;//车轮数
float weight;//重量
public:
void init(int wheels,float weight);
int get_wheels();
float get_weight();
void print();
};
void vehicle::init(int wheels,float weight)
this->wheels=wheels;
this->weight=weight;
cout<<wheels<<endl;
}
int vehicle::get_wheels()
{
return wheels;
}
float vehicle::get_weight()
{
return weight;
}
void vehicle::print()
{
cout<<"车轮数:"<<wheels<<","<<"重量:"<<weight<<endl;
}
22.(14分)建立一个对象数组,内放5个学生的数据(学号、成绩),设立一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。
初值自拟。