郑州大学《面向对象程序设计》1-12章在线测试题库
面向对象程序设计习题库
面向对象程序设计习题库选择题1. 一个设计得好的面向对象系统具有〔D〕特征。
A 低聚、低耦合B 高聚、低耦合C 高聚、高耦合D 低聚、高耦合2. 面向对象程序设计的特点主要概括为〔C〕。
A 可分解性、可组合性、可分类性B 继承性、封装性、多态性C 抽象封装性、继承性、多态性D 封装性、易维护性、可扩展性、可重用性3. 关于C#程序的书写,以下不正确的说法是( D )。
A. 区分大小写B. 一行可以写多条语句C. 一条语句可写成多行D. 一个类中只能有一个Main()方法,因此多个类中可以有多个Main()方法4. 关于C#语言的根本语法,以下哪些说确的是〔 C 〕A. C#语言使用using 来引用需要用到的命名空间;B. 用C#编写的程序中,Main 函数是唯一允许的全局函数;C. C#语言中使用的名称严格区分大小写;D. C#中一条语句必须写在一行;5 以下标识符中,正确的选项是〔A 〕。
A._nNameB. typeofC. 6bD. x5#6.字符串连接运算符包括&和〔A〕。
A. +B. -C. *D. /7.拆箱是关于:〔 B 〕A、值类型到引用类型的转换B、引用类型到值类型的转换C、引用类型到引用类型的转换D、值类型到值类型的转换8.装箱是关于:〔 A 〕A、值类型到引用类型的转换B、引用类型到值类型的转换C、引用类型到引用类型的转换D、值类型到值类型的转换9.以下引用类型和值类型描述正确的选项是〔A 〕。
A. 引用类型变量保存存地址,值类型直接保存变量值B. 引用类型在变量中直接保存变量值,值类型保存存地址C. 引用类型和值类型保存数据的方式一样D. .NET Framework不支持值类型,因为所有的类型都是引用类型了10.一个类中的静态方法的调用可以:( A )A、通过类名调用B、通过实例化的对象调用C、在主方法中直接调用D、在同一个类中的某一方法中直接调用11.以下数据类型中,属于引用类型的是:(A )A、string类型B、double类型C、int类型D、char类型12.以下类型中为值类型的是( C )A. 字符串类型B. 树组类型C. 枚举类型D. 接口类型13.decimal类型和浮点类型都可以表示小数,正确说法:( C )A. 两者没有任何区别B. 小数类型比浮点类型取值围大C.小数类型比浮点类型精度高D. 小数类型比浮点类型精度低14. 有定义语句:int [,]a=new int[5,6]; 那么以下正确的数组元素的引用是__C__。
面向对象程序设计 郑州大学远程教育
郑州大学现代远程教育《面向对象程序设计》课程考核要求说明:本课程考核形式为提交作业,完成后请保存为WORD 2003格式的文档,登陆学习平台提交,并检查和确认提交成功(能够下载,并且内容无误即为提交成功)。
一.作业要求1.请独立自主完成作业内容。
二.作业内容一)、简答题:(每题 5 分,共30 分)1、函数模板与函数有何关系?函数就是一个功能,一个程序文件包含多个函数,但只能有一个main函数。
函数模版是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表,这个通用的模版就是函数模版2、类模板与类有和关系?类模版是对一批仅仅成员数据类型不同的类的抽象,只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类,(这类可以看作是类模板的实例),从而大大提高编程的效率。
类(class)定义特定程序中的数据类型。
这些数据类型的实例被称为对象,这些实例可以包含程序员定义的成员变量、常量、成员函数,以及重载的运算符。
语法上,类是C中结构体(struct)的扩展,结构体不能包含函数以及重载的运算符3、什么是继承?所谓“继承”就是在一个已存在的类的基础上建立一个新的类。
已存在的类称为“基类(base class)”或“父类(father class)”,新建的类称为“派生类(derived class)”或“子类(son class )”。
一个新类从已有的类那里获得其已有特性,这种现象称为类的继承。
通过继承,一个新建子类从已有的父类那里获得父类的特性。
4、继承方式有哪些?产生的结果是什么?public、private、protected三种(它们直接影响到派生类的成员、及其对象对基类成员访问的规则)。
(1)public(公有继承):继承时保持基类中各成员属性不变,并且基类中private成员被隐藏。
派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象只能访问基类中的public成员。
《面向对象程序设计》课程知识 复习 学习材料 试题与参考答案
《面向对象程度设计》课程知识复习学习材料试题与参考答案一、单选题1.下列(C)的调用方式是引用调用。
A.形参和实参都是变量B.形参是指针,实参是地址值C.形参是引用,实参是变量D.形参是变量,实参是地址值2.假定CTest为一个类,并且有一无默认值的的有参构造函数和一无参构造函数,则执行“CTest objTest;”语句时将自动调用该类的(B)。
A.有参构造函数B.无参构造函数C.复制构造函数D.赋值构造函数3.假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a 的值,x为该类的一个对象,则访问x对象中数据成员a的格式为(D)。
A.x.aB.x.a()C.x->GetValue()D.x.GetValue()4.C++编译系统确定调用是具体对象的过程称为关联。
C++有(B)关联。
A.1种B.2种C.3种D.4种5.下面有关重载函数的说法中正确的是(C)。
A.重载函数必须具有不同的返回值类型B.重载函数形参个数必须不同C.重载函数必须有不同的形参列表D.重载函数名可以不同6.如果表达式a==b中的“==”是作为普通函数重载的运算符,若采用运算符函数调用格式,则可表示为(C)。
A.a.operator==(b)B.b.operator==(a)C.operator==(a,b)D.operator==(b,a)7.下列对继承关系的描述中,(D)是正确的。
A.在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的;B.在公有继承中,基类中只有公有成员对派生类的对象是可见的;C.在私有继承中,基类中只有公有成员对派生类是可见的;D.在私有继承中,基类中的保护成员对派生类的对象是可见的;8.定义p并使p指向动态空间中的包含30个整数的数组所使用的定义语句为(A)。
A.int *p=new int[30];B.int *p=new int(30);C.int *p=new [30];D.*p=new int[30];9.在一个类中可以对一个运算符进行(D)重载。
面向对象程序设计试卷及答案
考试试卷A(答案)面向对象程序设计注意事项:1. 请考生按要求在试卷装订线内填写、学号和年级专业。
2. 请仔细阅读各种题目的答复要求,在规定的位置填写答案。
3. 不要在试卷上乱写乱画,不要在装订线内填写无关的内容。
4. 总分值100分,考试时间为120分钟。
一.单项选择(本大题共10小题,每题3分,共30分)1. C#中每个int类型的变量占用〔B 〕个字节的内存。
〔A〕8 〔B〕4 〔C〕2 〔D〕12. 面向对象的特点是〔A 〕〔A〕封装、继承、多态〔B〕抽象、封装、多态〔C〕抽象、继承、封装〔D〕抽象、多态、重载3. C#控制台程序的主入口点是〔C 〕〔A〕Page_Load函数〔B〕Run函数〔C〕Main函数〔D〕Form_Load函数4. 引用类型存储在〔B 〕中。
〔A〕堆栈〔B〕堆内存〔C〕队列〔D〕列表5. 在C#中,表示一个字符串的变量应使用以下哪条语句定义〔B 〕〔A〕CString str 〔B〕string str〔C〕Dim str as string 〔D〕char *str6.在中,用来与数据源建立连接的对象是〔A 〕。
〔A〕Connection对象〔B〕Command对象〔C〕DataAdapter对象〔D〕DataSet对象7. 在类的定义中,类的〔 B 〕描述了该类的对象的行为特征。
〔A〕类名〔B〕方法〔C〕所属的名字空间〔D〕私有域8. 如果未显式赋值,则将整型值〔 B 〕赋给枚举中的第一个元素。
〔A〕1 〔B〕0 〔C〕2 〔D〕39. float类型的值可以隐式转换成〔 C 〕类型的值而保持值不被改变。
〔A〕char 〔B〕long 〔C〕double 〔D〕int10. 在C#中,假设Class1是一个类,而IExample 是一个接口,下面的〔 A 〕类声明是正确的。
〔A 〕class Employee: Class1, IExample〔B 〕class Employee: IExample, Class1〔C 〕class Employee- Class1, IExample〔D 〕class Employee: Class1/IExample二.判断题 (本大题共5小题,每题3分,共15分)1. C#中子类可以继承多个基类,也可以继承一个接口。
面向对象程序设计 郑州大学网考资料及答案
面向对象程序设计郑州大学网考资料及答案一、考试资料面向对象程序设计是计算机科学中的一种重要方法,它以对象为基础,将数据和操作封装在对象中,通过对象之间的关系和交互来实现程序的功能。
以下是一些关于面向对象程序设计的考试资料:1、对象的概念和分类:对象是面向对象程序设计的核心概念,可以分为类对象和实例对象。
类对象是类的实例,实例对象是类的具体表现。
2、封装性:面向对象程序设计中的封装性是指将数据和操作封装在对象中,通过访问控制机制来限制外部对内部数据的访问。
3、继承性:继承性是指子类可以继承父类的属性和方法,同时还可以添加自己特有的属性和方法,实现代码的重用和扩展。
4、多态性:多态性是指同一消息可以被不同的对象接收并执行不同的操作,使得程序具有更好的灵活性和可扩展性。
5、抽象性:抽象性是指通过抽象类和接口来定义对象的通用属性和方法,具体的实现细节由子类来完成,从而实现对象的抽象和分离。
6、常用面向对象编程语言:Java、C++、Python等语言都是支持面向对象编程的常用语言,其语法和特性各不相同,但都遵循面向对象的基本思想。
7、常用设计模式:设计模式是解决常见问题的经验总结,包括单例模式、工厂模式、观察者模式等,可以帮助开发者更好地设计和实现程序。
二、考试答案以下是一些关于面向对象程序设计的考试答案:1、什么是对象?答:对象是现实世界中事物的抽象,是属性及其方法的集合。
2、什么是封装性?答:封装性是指将数据和操作封装在对象中,通过访问控制机制来限制外部对内部数据的访问。
它有助于保护对象内部数据不被外部随意修改,同时提供了安全性和稳定性。
3、什么是继承性?答:继承性是指子类可以继承父类的属性和方法,同时还可以添加自己特有的属性和方法,实现代码的重用和扩展。
它有助于减少代码冗余,提高代码的可维护性和可扩展性。
4、什么是多态性?答:多态性是指同一消息可以被不同的对象接收并执行不同的操作,使得程序具有更好的灵活性和可扩展性。
001017[面向对象程序设计]5天大在线考试题库及答案
001017[面向对象程序设计]5天大在线考试题库及答案面向对象程序设计复习题一、单项选择题1、基类中的保护成员在其私有派生类中的访问属性是(答案是A )。
A.私有B.公有C.保护D.不确定2、在类的非静态成员函数中,不可以直接访问的数据成员是(答案是D )。
A.本类的私有成员B.本类的保护成员C.本类的公有成员D.本类的所有非静态成员3、下列标示符中,不符合C++标示符命名规则的是(C)。
A.x10B. _totalC.πD.www4、下列整型常数中,不符合C++语法的是(C)。
A.12uB.-67lC.059D.0X11ff5、下列常量中,不符合C++语法的是(答案是D )。
A.”\\0”B.‘*’C.“”D.“It’s an array!”6、下列数组的初始化形式中,不符合C++语法的是(答案是A )。
A.int s1[3]={1,2,3,4}B.int s2[3]={0}C.char s3[3]={‘a’,’x’,’d’}D.char s4[]=“asd”7、如果说明语句为:int a[4]={10,20,30,40,50}, *p=&a[2];则*p的值是(答案是 B )。
A.a[2]的地址B.30C.20D.不确定8、已知:int a[3][3];下列表示数组元素a[0][0]的方法中,不符合C++语法的是(C)。
A.**aB.*a[0]C.a[0]D.*(*a[1]-1)9、已知:int a=3,b=5,下列表达式中,值为0的表达式是(答案是 B )。
A.a%5-5B.a/bC.!a||bD.a&&b10、C++中字符常数的定界符是(答案是 B )。
A.”B.‘C.#D.\\11、已知:int a=9,sum=0;下列循环中,不构成死循环的是(答案是 A )。
A.for(;a;a++) sum+=a--B.do{sum+=a--}while(--a);C.while(a=1) sum+=a--;D.do{sum+=a}while(a-1);12、如果定义一个函数时未指定该函数的返回值类型,则函数返回值类型应是(答案是 B )。
面向对象程序设计习题
1.面向对象程序设计中的数据隐藏指的是参考答案为: DA.输入数据必须输入保密口令B.数据经过加密处理 C. 对象内部数据结构上建有防火墙D.对象内部数据结构的不可访问性解析输入数据必须输入保密口令和数据经过加密处理都不是面向对象程序设计的特征;对象内部数据结构上也不可能建有防火墙,所以它们都不是面向对象程序设计中所指的数据隐藏;面向对象程序设计系统中的封装单位是对象,对象之间只能通过接口进行信息交流,外部不能对对象中的数据随意地进行访问,这就造成了对象内部数据结构的不可访问性,也使得数据被隐藏在对象中;这就是面向对象程序设计中的数据隐藏所指;2.下列各项中符合函数重载必须满足的条件的是参考答案为:DA.必须有不同的参数个数B.对应的参数类型必须不相同 C. A和B必须同时满足D.A和B只要满足一个即可解析我们知道,在同一个作用域中,要实现函数重载必须满足的条件的是:① 有不同的参数个数;或者② 对应的参数有不相同的数据类型,即①和②中只要有一个满足就可以了;当然两者都满足更好,但这不是必须的;3.下列带缺省值参数的函数说明中,正确的说明是参考答案为:AA.int Funint x,int y=2,int z=3; B.int Funint x=1,int y,int z=3;C. int Funint x,int y=2,int z; D.int Funint x=1,int y,int z=3;解析在带缺省值参数的函数说明中,正确的说明应该是无缺省值的参数依次排列在参数表的左边,排完无缺省值的参数后,再依次排列带缺省值的参数;从所给出的四个选项来看,只有“int Funint x,inty=2,int z=3”符合这条规定,其它的都不符合;4.有如下的对类“CSample”的说明,其中是错误的;class CSample { 参考答案为:AA.int a=23;B.CSample;public:C.CSampleint val;D.~ CSample;}解析在上面对类“CSample”说明中,“CSample”和“CSampleint val”是该类重载的构造函数、“~ CSample”是该类的析构函数,这三个语句都是正确的;错误的语句是“int a=23”,因为它违反了在类的声明不管是引用性声明,还是定义性声明中都不能以赋值表达式的形式给它的数据成员进行初始化; 5.已知类A中的一个成员函数的说明如下:void SetA &a;则该函数的参数“A &a”的含义是参考答案为:CA.指向A的指针为aB.将变量a的地址赋给类AC.类A对象引用a用作函数的形参D.变量A与a按位与后作函数参数解析因为A是一个类,所以“A &a”表示a是类A的对象,但因为对象a的前缀了符号“&”,则“&a”表示是类A的对象引用;所以“A &a”的含义是类A对象引用a用作函数的形参;6.若类A和类B的定义如下:class A {public:int i,j;void get;};class B:A {int i,j;protected:int k;public:void make;};void B::make { k=ij; }则其中是非法的表达式; 参考答案为:DA.void get;B.int k;C.void make;D.k=ij;解析对于给定的四项中,前三项都是正确的,只有第四项是错误的;因为,类B是类A的私有派生类缺省访问类型,所以A中的公类型的数据成员在类B中成为了私有数据成员,但函数“void B::make”既然是类B的成员函数,则既可访问类A中的公有数据成员,也能访问类B中的私有数据成员,则表达式“k=ij;”造成了访问的二义性,即其中的i和j,到底是取自类A呢还是取自类B呢7.下面的主程序中,语句是错误的;class A {int i;public:virtual void fun=0;Aint a { i=a; }};class B {int j;public:void fun { cout<<”B::fun\n”; }Bint b,int c :Ab { j=c; }};void main 参考答案为:AA.{ A a5;B.A pa;C.B b7;D.B pb;}解析在类A中,函数“virtual void fun=0”为纯虚函数,因此,类A为抽象类;作为抽象类,它是不能被用来定义具体对象的,而语句“A a5;”恰恰是定义抽象类的对象的,所以它是错误的8.拷贝复制构造函数的作用是参考答案为:CA.进行数据类型的转换B.用对象调用成员函数C.用对象初始化对象D.用一般类型的数据初始化对象解析进行数据类型的转换和用一般类型的数据初始化对象都是一般构造函数的功能;用对象调用成员函数不用构造函数,只要用“对象名.成员函数名”即可;所以拷贝复制构造函数的作用,只能是用对象来初始化对象;9.下列说法中,正确的说法是参考答案为:BA.所有的运算符都能被重载B.运算符被重载时,它们的优先级与结合性不会改变C.当需要时,我们可以自定义一个运算符来进行重载D.每个运算符都可以被重载成成员函数和友元函数解析当重载运算符时,不是所有的运算符都能被重载,有几个运算符是不能被重载的,如三元运算符“:”、‘.’、‘’、‘::’、‘’等;也不是每个运算符都可以被重载成成员函数和友元函数,如运算符‘=’、‘’、‘’、和‘→’都只能被重载成成员函数;无论何时,都不能自定义运算符来进行重载,也即重载只能对已有运算符进行;但是运算符被重载时,它们的优先级与结合性不会改变; 10.下面对结构或类中成员的访问中,不正确的访问是参考答案为:AA.; 其中pointer为指向类对象的指针B.pointer->salary;C.x=; 其中worker为具有类类型的对象D.Location &rA=A1;int x=rA.GetX; Location为已定义的类,A1为对象解析因pointer为指向类对象的指针,所以“pointer->salary”是正确的访问数据成员的形式;因worker为具有类类型的对象,所以“”也是正确的访问数据成员的形式;因Location为已定义的类,A1为对象,所以“Location &rA=A1;int x=rA.GetX;”表示以对象A1初始化对象引用rA,然后由对象引用rA调用成员函数GetX给变量x赋值,这样的访问成员函数的形式也是正确的;“;”中,因为运算符‘.’的优先级高于运算符‘’的优先级,所以相当于“;”,那正确的形式应该是“pointer→salary;”;故“”是不正确的访问;11.C++ 对 C 语言作了很多改进,即从面向过程变成为面向对象的主要原因是 DA.增加了一些新的运算符B. 允许函数重载,并允许设置缺省参数C. 规定函数说明符必须用原型 D. 引进了类和对象的概念12.下列符号不能组成标识符的是 A A. 连接符 B. 下划线 C. 大小写字母 D. 数字字符13.类型修饰符 unsigned 不能修饰 D A. char B. int C. long int D. float14.在 int a=3,int p=&a ;中, p 的值是 D A. 变量 a 的地址值 B. 无意义 C. 变量 p 的地址值15.下列关于指针的操作中,错误的是 D A. 两个同类型的指针可以进行比较运算 B. 可以用一个空指针赋给某个指针 C. 一个指针可以加上两个整数之差 D. 两个同类型的指针可以相加二,填空题不写解答过程,将正确的答案写在每小题的空格内;错填或不填均无分;1.面向对象程序设计中的多态性包括静态多态性和动态多态性,前者由____________机制支持,而后者则由____________机制支持;答:函数重载、虚函数解析静态多态性又称编译时多态性,调用何函数应该在编译之前就知道了,所以必须由函数重载机制来支持;动态多态性又称运行时多态性,调用何函数只有在运行时才知道,所以由虚函数与指针或引用机制来支持;2.由cha r const str=”stucture”;所以定义的指针称为____________,关键字const 所修饰的是____________;答:指向常量的指针、指针所指的字符串解析根据由‘’在修饰符“const”中位置的不同,它所修饰的对象也不同,“const ”表示所修饰的是指针所指的常量,该指针称为指向常量的指针;“ const”表示所修饰的是指针本身,该指针称为常指针;“ const ”则表示所修饰的是指针本身和指针所指常量,该指针称为指向常量的常指针;3.引入虚基类的目的是为了解决多重继承中的____________和____________问题;答:二义性、多占用空间解析在允许多重继承时可能出现两个问题,第一个是公有派生类中的成员通过不同基类调用它们上一级公共基类的同一成员,这就产生了调用的二义性;每一个基类都为它们的上一级公共基类存有备份,这就引起了公共基类的重复存储,也就多占了存储空间;引入虚基类的目的是为了解决多重继承中的这两个问题;4.构造函数与析构函数所调用的虚函数是____________的函数,因此调用时实现的是____________联编;答:所在类、静态解析在生成派生类的对象时,先调用基类的构造函数生成基类对象,再调用派生类的构造函数来生成派生类对象;所以当在构造函数中调用虚函数时,当调用基类的构造函数时,此时派生类还未生成,所以它只能调用自己的虚函数;调用派生类构造函数时,它也只能调用自己的虚函数,因为虚函数的调用是不能由派生类调用基类的;在析构派生类对象是时,先调用派生类的析构函数析构掉派生类对象,再调用基类的析构函数来析够掉基类的对象;所以当在析够构函数中调用虚函数时,派生类的析构函数调用的是它自己的虚函数原因同构造函数,基类的析构函数调用的也是它自己的虚函数,因为此时派生类对象以已被析构掉了;由上可见,当构造函数与析够函数调用虚函数时,它们调用的都是自己类的函数,因此调用时实现的是静态联编;7.说明一个const成员函数又称常量成员函数的方法是,将const写在__________之间,而且它修饰的是__________;答:函数头与函数体、this指针解析为了说明一个常量成员函数的方法是,将const写在函数头的右圆括号‘’与函数体的左花括号‘{’之间,而且它修饰的是对象所属的this指针;表示该函数不能修改它所在对象中的数据成员的值; 20.对某个运算符的重载,实际上是用关键字____________与该运算符组成一个运算符函数,而且该运算符函数的返回类型不能是____________的;答:operater、void解析对某个运算符的重载,实际上是用关键字operater 与该运算符组成一个运算符函数,而且该运算符函数的返回类型不能是无类型的,即不能是void的;三改错题1.分析下列程序中的错误,并说明出错原因;includeclass base {const int n;public:base { cout<<”Initializing default\n”; }baseint m { cout<<”Initializing\n”; n=m; }~base { cout<<”Destroying\n”; }};void main{ base x1;base y=x;}答:1 n=m; const数据成员不以该形式赋值2错误处base y=x;,以对象初始化对象解析1作为const数据成员n不能用赋值表达式的形式为其赋初值,必须在定义构造函数时在函数头中以“baseint m:nm”形式来初始化;2base y=x; 语句中‘=’不是赋值的意思,而是初始化的意思;即在定义类base的对象y时,以对象x给它初始化,相当于base yx;;但是以对象初始化对象时,必须调用拷贝构造函数才行;因程序中没给出拷贝构造函数,也不能调用系统的缺省拷贝构造函数,因用户给出了构造函数后,再也不能调用系统提供的任何缺省构造函数;所以,base y=x;是错误的;2.分析下列程序中的错误,并说明出错原因;includeclass A {int x;public:Aint a { x=a; fun; }virtual void fun=0;};class B:public A {public:Bint b :Ab {}void fun { }};void main{ A aa5;B bb8;}答:1A aa5; 抽象类不能定义对象解析1在构造函数“Aint a”调用了纯虚函数“fun”,因构造函数调用虚函数是静态联编,即调用的是它自己类的虚函数;在此调用的是纯虚函数,它只被说明,而未定义,所以不可能被执行,因此出错;2抽象类相当于是对类的引用性声明,所以它只能定义该类的指针和引用,而不能定义它的对象;在此,A 为抽象类,而“A aa5”却定义了A的对象,因此是错误的;3.分析下列程序中的错误,并说明出错原因;includeclass AA {int aa;AAint xx { aa=xx; }public:int get { return aa; }~AA { cout<<”Destroying”<<AA<< endl;};main{ AA elem5;cout<<<<endl;}答:1AAint xx 的访问属性错、应具有公有属性解析1构造函数虽是由系统自动调用来生成对象的,但一般都是在类外调用,所以它的访问属性必须是公有的;程序中构造函数的访问属性是私有的缺省值,运行中必定出错;四.完成程序题本大题共5小题,每小题4分,共20分根据题目要求,完成程序填空;1.仔细阅读下列求两个点之间距离的程序,根据程序的输出结果在划线处填入正确语句;class point {float x,y;public:pointfloat a,float b { x=a; y=b; }float distancepoint &p {float dx=_____①______;float dy=_____②______;return floatsqrtdxdx+dydy;}};void main{ point p12,3,p232,43;cout<<③___<<endl;}答:①②③distancep2解析由于求两点之间距离的函数“distance”为成员函数,所以由该函数的this指针所指对象可用作起点参数之一,另一个用作终点的参数,必须在函数的参数表中显式地给出;dx 和dy分别计算两个结点间x和y坐标间的距离,因此应该为:dx= – x 和 dy = – y;对它们求平方相加后开方即可,得到两点间的距离:floatsrrtdada+dydy;在主程序中求p1和p2两个结点之间的距离,由于由p1调用距离函数,所以由p2作为它的参数,即distancep2;2.两个复数只有当它们的实部和虚部分别相等时,才被认为它们相等;在空格处填入合适的内容,以完成下面的程序,使其重载运算符“==”,用以比较两个复数的相等;请在主函数中输出比较的结果;includeclass complex {double real,imag;public:complexdouble r,double i { real=r; imag=i; }bool operator==complex &;};int complex:: operator==complex &com{ return_____①_____ }void main{ complex c1,,c2,;if______②______return cout<<”true\n”;elsereturn cout<<”false\n”;}答:① real==&&imag==② c1==c2或==c2解析若两个复数的相等,则必有它们的实数部分和虚数部分都相等,所以运算符重载函数中返回“real==&&imag==”,只有real==与imag==都为真时,该函数的返回值才为真;在主程序中,为了比较两个复数c1和c2,可以隐式地写成“c1==c2”,也可显式写成“==c2”;3.下列程序中声明了两个类AA和BB,其中函数“print”是类AA的成员函数,但是类BB的友元函数;请在①、②和③处各填入正确的内容,使程序能正常运行;include_____①______;class AA {int t;public:AAint x { t=x; }void printBB &b;};class BB {int s;public:BBint y { s=y; }friend v oid ___②___printBB &;};void ____③_____{ cout<<”AA:”<<T<<”;BB:”<<<<endl;}void main{ AA m6;BB n8;n;}答:① class BB;② AA::③ AA::printBB &w解析由于AA类的成员函数“print”是类BB的友元函数,因此它必须有一个BB类的引用作为参数,以便有引用BB类数据成员的接口;但此时BB类还未定义,为解决此矛盾,在①处先对BB类作引用性声明“class BB;”,告诉系统BB类在后面定义;因为函数“print”是类AA的成员函数,在类外定义必须加上类名和作用域分辨符,即在②处加上“AA::”;在BB类外定义“print”时,因是友元,所以没有加上“BB::”的必要,但“AA::”还是必须加的,所以在③处填“AA::printBB &w”;五.程序分析题1.请分析以下的程序,给出该程序的正确执行结果;include<iostream>using namespace std;int addint x,int y Array {return x+y; }void main{int m=2,n=3;cout<<"1:"<<addm++,m+n<<endl;m=2,n=3;cout<<"2:"<<add++m,m+n<<endl;m=2,n=3;cout<<"3:"<<addm+n,m++<<endl;m=2,n=3;cout<<"4:"<<addm+n,++m<<endl;}答:1:72:83:84:9解析在说明答案之前,要说明两个问题:1C++语言中,函数参数是压在栈里的,因压栈是从前往后进行的,所以出栈就是从后向前进行的,也即先取最后的参数,然后再向前逐个取用;2对于单加运算,m++是先执行后加1,++m是加1后再执行;由此,因m=2,n=3;,所以:1:m+++m+n=2+2+3=7 m++后执行,且后加1,所以m=2一直未变2:++m+m+n=3+2+3=8 ++m后执行,但先加1,执行++m时,m=3了3:m+n+m++=3+3+2=8 先执行m++,后加1,执行m+n时,m=3了4:m+n+++m=3+3+3=9; 先执行++m,且先加1,故一开始就有m=33.请分析下面的程序并给出该程序的执行结果;includeclass AA {int a;public:AA { cout<<”In itualizing AA\n”; }~AA { cout<<”Destroying AA\n”;};class BB {int b;AA p;public:BB { cout<<”Initualizing BB\n”; }~BB { cout<<”Destroying BB\n”;};void main{ BB X;cout<<”Ending main\n”;}答:Initualizing AAInitualizing BBEnding mainDestroying BBDestroying AA解析虽然在主程序中只定义了一个类BB的对象,但在类BB中声明了类AA的对象作为它的数据成员;当一个类中含有对象作为数据成员时,在生成对象时,先调用成员对象的构造函数,再调用类自己的构造函数,所以输出了“Initualizing AA”成员对象构造函数的输出和“Initualizing BB”类自己构造函数的输出;对象生成后,执行下一句输出语句,则输出“Ending main”;此时程序结束,调用析构函数来析构掉对象,先调用类自身的析构函数,其输出为“Destroying BB”,再调用成员对象的析构函数,其输出为“Destroying AA”;4.写出下列程序的运行结果;includeclass AA {public:static int n;AA { n++; }};int AA::n=0;main{ cout<<”AA::n=”<<AA::n<<endl;AA d1;cout<<<<<endl;AA d2;cout<<<<<endl;AA d3,d4;cout<<<<<endl;cout<<<<<endl;}答:AA::n=0=1=2=4=4解析由于数据成员n的访问属性是公有的,所以在类外可访问它;又它是静态变量,所以具有全局性;在构造函数中,执行的是n++操作,即每次调用构造函数n就加1;当程序开始时,因未定义对象,所以n的值为初始化时的值,则输出为“AA::n=0”;当定义了对象d1后,由于调用了构造函数,则该对象中n=1,故输出“=1”;同理,对象d2输出“=2”;由于接下来生成了两个对象d3和d4,调用两次构造函数,n两次加1,此时n=4,所以下面两条语句的输出为“=4”和“=4”;5.写出下列程序的输出结果;includeclass AA {public:AA{} { cout<<”Constructor of AA. \n”; fun; }virtual void fun { cout<<”AA::fun calle d.\n”; }};class BB:public AA {public:BB{ cout<<”Constructor of BB.\n”; fun; }void fun { cout<<”BB::fun calle d.\n”; }};void main{ BB d; }答:Constructor of AA.AA::fun called.Constructor of BB.BB::fun called.解析虽然函数fun说明为虚函数,但当在构造函数中被调用时,呈现的是静态联编,即基类和派生类都调用各自的函数fun;所以,当生成对象d时,先调用基类的构造函数,在构造函数中又调用自己的函数“fun”,所以输出为“Constructor of AA.”和“AA::fun called.”;同理调用派生类的构造函数时,生成的输出为“Constructor of BB.”和“BB::fun called.”;6.请给出下面的程序的输出结果;includetemplate class Tvoid sortT a,int n{ T num;forint i=0;i<n-1;i++{ forint j=i;j<n-1;j++ifaj>aj+1{ num=aj; aj=aj+1; aj+1=num; }}fori=0;i<n;i++cout<<ai<<endl;}void main{ int iver5={ 12,45,9,23,37 };double dver5= { ,,,, };sortiver,5;sortdver,.5;}答:9 12 23 37 45解析这是使用模板的例子;函数sort是一个递增的排序函数,T是个模板;当数组是整型数据类型时,它为整型数组排序;当数组为双精度数据类型时,它为双精度数组排序;所以输出如上结果;7.分析以下程序的执行结果 include<>void main{int a;int &b=a; fp;fp=&Sample::gety;int t=s.fp;cout<<"v="<<v<<",t="<<t<<endl;}解:本题说明了类成员函数指针的使用方法;在main中定义的fp是一个指向Sample类成员函数的指针;执行fp=Sample::getx后;fp指向成员函数getx,int v=s.fp语句等价于int ,v=x=2;执行fp=Sample::gety之后,fp指向成员函数gety,int t=s.fp语句等价于int t=,t=x=7;所以输出为:v=2,t=711.分析以下程序的执行结果include<>class Sample{int x;int y;public:Sampleint a,int b{x=a;y=b;}int getx{return x;}int gety{return y;}};void main{int Sample::fp;fp=&Sample::getx;Sample s2,7,p=&s;int v=p->fp;fp=&Sample::gety;int t=p->fp;cout<<"v="<<v<<",t="<<t<<endl;}解:本题说明了类成员函数指针的使用方法;这里通过指向对象的指针来调用指向类成员函数的指针,其原理与上题相似;输出仍为:v=2,t=712.分析以下程序的执行结果include<>class base{public:base{cout<<"constructing base class"<<endl;}~base{cout<<"destructing base class"<<endl; }};class subs:public base{public:subs{cout<<"constructing sub class"<<endl;}~subs{cout<<"destructing sub class"<<endl;}};void main{subs s;}解:本题说明单继承情况下构造函数和析构函数的调用顺序;这里base为基类,subs为派生类;所以输出为:constructing base classconstructing sub classdestructing sub classdestrcuting base class注意:在单继承情况下,首先调用基类的构造函数 ,随后调用派生类的构造函数,析构函数的调用顺序则正好相反;13.分析以下程序的执行结果:include<>class base{int n;public:baseint a{cout<<"constructing base class"<<endl;n=a;cout<<"n="<<n<<endl;}~base{cout<<"destructing base class"<<endl;}};class subs:public base{base bobj;int m;public:subsint a,int b,int c:basea,bobjc{cout<<"constructing sub cass"<<endl;m=b;cout<<"m="<<m<<endl;}~subs{cout<<"destructing sub class"<<endl;}};void main{subs s1,2,3;}解:本题说明派生类中含有对象成员情况下构造函数和析构函数的调用顺序;这里base为基类,subs 为派生类,subs类的构造函数中含有对象成员;所以输出为:constrcuting base classn=1constructing base classn=3constructing sub classm=2destructing sub classdestructing base classdestructing base class注意:当派生类中含有对象成员时,构造函数的调用顺序如下:基类的构造函数2对象成员的构造函数3派生类的构造函数析构函数的调用顺序与之相反14.分析以下程序的执行结果include<>class A{public:int n;};class B:public A{};class C:public A{};class D:public B,public C{int getn{return B::n;}};void main{D d;::n=10;::n=20;cout<<::n<<","<<::n<<endl;}解: D类是从类和类派生的而类和类又都是从类派生的,但各有自己的副本;所以对于对象d,::n与::n 是两个不同的数据成员它们互无联系;所以输出为:10,2015.分析以下程序的执行结果include<>class A{public:int n;};class B:virtual public A{};class C:virtual public A{};class D:public B,public C{int getn{return B::n;}};void main{D d;::n=10;::n=20;cout<<::n<<","<<::n<<endl;}解:D类是从类和类派生的而类和类又都是从类派生,但这是虚继承关系即是虚基类因此和共用一个的副本所以对于对象d,::n与::n是一个成员;所以输出为:20,2016.分析以下程序执行结果include<>int addint x,int y{return x+y;}double adddouble x,double y{return x+y;}void main{int a=4,b=6;double c=,d=;cout<<adda,b<<","<<addc,d<<endl;解:本题说明函数重载的使用方法, 这里有两个add函数,一个add函数的参数与返回值为int型,另一个的参数与返回值为double型,它们是根据参数类型自动区分的;所以输出为: 10,1017.分析以下程序的执行结果include<>class Sample{int i;double d;public:void setdataint n{i=n;}void setdatadouble x{d=x;}void disp{cout<<"i="<<i<<",d="<<d<<endl;}};void main{Sample s;10;;;}解:本题说明重载成员函数的使用方法;setdata成员函数有两个,根据其参数类型加以区分;所以输出为:i=10, d=22.分析以下程序的执行结果include<>class Sample{int n;public:Sample{}Sampleint i{n=i;}Sample &operator =Sample;void disp{cout<<"n="<<n<<endl;}};Sample &Sample::operator=Sample s{Sample::n=;return this;}void mainSample s110,s2;s2=s1;;}解:本题说明重载运算符=的使用方法;operator=成员函数实现两个对象的赋值;所以输出为: n=10六.程序设计题1.设计一个三角形类Triangle,包含三角形三条边长的私有数据成员,另有一个重载运算符“+”,以实现求两个三角形对象的面积之和;解:在Triangle类中设计一个友元函数operator+Triangle t1,Triangle t2,它重载运算符"+",返回t1和t2两个三角形的面积之和;本题程序如下:include<>include<>class Triangle{int x,y,z;double area;public:Triangleint i,int j,int k{double s;x=i;y=j;z=k;s=x+y+z/;area=sqrtss-xs-ys-z;}void disparea{cout<<"Area="<<area<<endl;}friend double operator+Triangle t1,Triangle t2{return +;}};void main{Triangle t13,4,5,t24,5,6;double s;cout<<"t1:"; ;cout<<"t2:"; ;s=t1+t2;cout<<"总面积="<<s<<endl;本程序执行结果如下:t1:Area=6t2:Area=总面积=2.重载运算符“+”友元函数只能返回两个三角形的面积之和,不能计算三个三角形的面积之和,改进一下,使之能计算任意多个三角形的面积之和;解:重载运算符为什么不能计算3个三角形的面积之和呢对于式子:s=t1+t2+t3,先计算t1+t2,返回一个double数然后再进行该double数+t3的计算,显然没有这样的重载运算符“+”友元函数,只需要添加这样重载运算符“+”友元函数即可;本题程序如下:include<>include<>class Triangle{int x,y,z;double area;public:Triangleint i,int j,int k{double s;x=i;y=j;z=k;s=x+y+z/;area=sqrtss-xs-ys-z;}void disparea {cout<<"Area="<<area<<endl;}friend double operator+Triangle t1,Triangle t2{return +;}friend double operator+double d,Triangle t{return d+;}};void main{Triangle t13,4,5,t24,5,6,t35,6,7,t46,7,8;double s;cout<<"t1:"; ;cout<<"t2:"; ;cout<<"t3:"; ;cout<<"t4:"; ;s=t1+t2+t3+t4;cout<<"总面积="<<s<<endl; }本程序的执行结果如下:t1:Area=6t2:Area=t3:Area=t4:Area=总面积=3.设计一个学生类student,包括姓名和三门课程成绩,利用重载运算符”+“将所有学生的成绩相加放在一个对象中,再对该对象求各门课程的平均分; 解:include<>include<>include<>class student{char name10;int deg1,deg2,deg3;public:student{}studentchar na,int d1,int d2,int d3{strcpyname,na;deg1=d1;deg2=d2;deg3=d3;}friend student operator+student s1,student s2{static student st;=+;=+;=+;return st;}void disp{cout<<setw10<<name<<setw5<<deg1<<setw5<<deg2<<setw5<<deg3<<endl;}friend void avgstudent &s,int n{cout<<setw10<<"平均分"<<setw5<<n<<setw5<<n<<setw5<<n<<endl;}};void main{student s1"Li",77,82,85,s2"Zheng",75,62,89;student s3"Ma",89,87,95,s4"Xu",55,79,65,s;out<<"输出结果"<<endl;;;s=s1+s2;avgs,2;;;s=s3+s4;avgs,2;}运行结果:输出结果li 77 82 85zheng 75 62 89平均分 76 72 87Ma 89 87 95Xu 55 79 65平均分 72 83 804.计算e的值;e是自然对数的底,它和π一样是数学中最常用的无理数常量;其近似值的计算公式为:e=1+1/1+1/2+1/3+...+1/n-1+r当n充分大时,这个公式可以计算任意精度e的近似值;为了保证误差r<ε,只需1/n-1 > r <ε程序代码如下:// programinclude<>void main{const double eps=;int n=1;float e=,r=;do // 开始do循环;循环条件由后面的while中的表达式值确定;{e+=r;n++;r/=n;}whiler>eps;cout<<"The approximate Value of natural logarithm base is: ";cout<<e<<endl;}5.16.设计一个立方体类Box,它能计算并输出立方体的体积和表面积;解: Box类包含三个私有数据成员a立方体边长、volume体积和area表面积,另有两个构造函数以及seta设置立方体边长、getvolume计算体积、getarea计算表面积和disp输出结果;。
郑州大学现代远程教育《面向对象程序设计》(本科)
郑州大学现代远程教育《面向对象程序设计》(本科)课程作业请保存为WORD格式的文档,登陆学习平台(/)提交,务必检查提交是否成功。
1、编写一个程序实现24小时计时转换为12进制计时。
具体要求:以四位整数表示24小时计时法时间,pm表示下午,am表示上午运行示例:例1:输入24小时计时法时间: 174312小时计时法时间:1743 是 5.43 p.m.例2:输入24小时计时法时间: 090412小时计时法时间:0904 is 9.04 a.m.2、编写一个简单的工资管理系统。
具体要求:设计三个类Employee类,Manager类和HourlyWorker类。
Manager类和HourlyWorker类是Employee类的子类。
Emloyee类记录职工的姓名和编号,Manager类增加了经理的工资属性;Hwourlyworker记录钟点工每小时的工资数和一个月的工作小时数。
每一个类中必须包含构造函数,析构函数,修改和获取所有数据成员的函数,计算职工工资,显示职工姓名和编号的虚函数。
主函数中设计一个数组存放所有职工对象。
提示用户选择:[1] 增加一个职工[2] 显示数组中所有的职工以及他们的工资[3] 显示数组中所有的经理以及他们的工资[4] 显示数组中钟点工以及他们的工资[5] 退出选择1时,输入职工名字,编号,职工类别,工资情况选择2时,显示数组中所有职工的姓名,编号和工资选择3时,显示数组中所有经理的姓名,编号和工资选择4时,显示数组中所有钟点工的姓名,编号和工资选择5,提示“谢谢使用,再会”后,退出。
程序运行示例:[1] 增加一个职工[2] 显示数组中所有的职工以及他们的工资[3] 显示数组中所有的经理以及他们的工资[4] 显示数组中钟点工以及他们的工资[5] 退出输入选择:1输入职工信息:姓名:张三编号:9904类别:经理月工资:2000***增加一个职工***张三 9904 2000[1] 增加一个职工[2] 显示数组中所有的职工以及他们的工资[3] 显示数组中所有的经理以及他们的工资[4] 显示数组中钟点工以及他们的工资[5] 退出输入选择:1输入职工信息:姓名:李四编号:9905类别:经理月工资:1000***增加一个职工***李四 9905 1000[1] 增加一个职工[2] 显示数组中所有的职工以及他们的工资[3] 显示数组中所有的经理以及他们的工资[4] 显示数组中钟点工以及他们的工资[5] 退出输入选择:1输入职工信息:姓名:王五编号:9906类别:钟点工小时工资:10月工作小时数:50***增加一个职工***王五 9906 小时工资:10,月工作小时数:50[1] 增加一个职工[2] 显示数组中所有的职工以及他们的工资[3] 显示数组中所有的经理以及他们的工资[4] 显示数组中钟点工以及他们的工资[5] 退出输入选择:2***职工工资表***张三 9904 2000李四 9905 1000王五 9906 500[1] 增加一个职工[2] 显示数组中所有的职工以及他们的工资[3] 显示数组中所有的经理以及他们的工资[4] 显示数组中钟点工以及他们的工资[5] 退出输入选择:3***经理工资表***张三 9904 2000李四 9905 1000[1] 增加一个职工[2] 显示数组中所有的职工以及他们的工资[3] 显示数组中所有的经理以及他们的工资[4] 显示数组中钟点工以及他们的工资[5] 退出输入选择:4***钟点工工资表***王五 9906 10 50 500[1] 增加一个职工[2] 显示数组中所有的职工以及他们的工资[3] 显示数组中所有的经理以及他们的工资[4] 显示数组中钟点工以及他们的工资[5] 退出输入选择:5***谢谢使用,再会***3、在二维坐标系上定义GRAPH抽象类,该类具有基点坐标和图形显示等纯虚函数。
《面向对象程序设计》第1.7.9.11.12章在线测试(含答案)
D、双向容器 答案:AABBB 第二题、多项选择题(每题 2 分,5 道题共 10 分) 1、下面属于适配器容器的是( ) AB A、优先队列 B、堆栈 C、集合 D、映射 2、下面属于容器的头文件是()ABCD A、vector B、list C、quene D、set 3、下面的说法正确的是()题太坑!!!对的也显示错误! A、容器用于存放数据对象 B、算法用于操作容器中的数据对象 C、迭代器是容器的代替 D、迭代器用于链接容器和算法 4、下面关于 string 类型的说法正确的是()AD A、使用 string 类型前,程序必须包含头文件 string B、string 类型是 C++的一部分 C、string 类型与 char* 类型的作用一样
D、00010010 答案:DADCC 第二题、多项选择题(每题 2 分,5 道题共 10 分) 1、下面的说法正确的是()AC A、输入输出流是指变量或者对象与外设之间的输入输出操作。 B、实现输入输出操作的 cin 和 cout 是 C++的语句 C、流是用流类定义的对象,而流类是用于完成输入输出的类。 D、流是 IO 设备 2、下面的说法正确的是()BD A、缓冲流就是缓冲区 B、缓冲流当缓冲区满时才刷新流的数据 C、非缓冲流不处理数据 D、非缓冲流也要使用缓冲区 3、下面属于标准错误输出的流是()CD A、cin B、cout C、clog D、cerr 4、下面关于 cout 的说法正确的是()AD A、cout 是与标准设备链接的预定义输出流 B、运算符>>向 cout 发送字符 C、一个语句中只能使用一个插入运算符
B、重载函数的参数必须不同 C、重载函数的返回值类型必须不同 D、两个功能相似的操作可以重载函数得到 4、下面函数声明正确的是 ABD A、void f1(int a,int b); B、void f2(int a,int c,int b=-1); C、void f3(int a ,int b =-1, int c); D、int f4(…); 5、C++程序中声明变量 int *p1 , *p2 ,m=5, n;下面错误的 语句是 ABD A、p1=&m; p2=&p1; B、p1=&m; p2=&n;*p1=*p2 C、p1=&m;p2=p1; D、p1=&m;*p2=*p1; 第三题、判断题(每题 1 分,5 道题共 5 分) 1、if ( x = 3 ) 和 if (x ==3) 这两条语句的作用是一样 的。 错误 2、对内联函数不能进行异常接口声明。 正确 3、重载的函数的函数名是相同的,但它们的参数的个数和数据 类型不同。
面向对象程序设计试题集66124
第一章面向对象的方法学一.阅读程序题二.完成程序题三.改错题四.编程题五.填空题1. 面向对象程序设计方法的基本特征主要有抽象性、( )、继承性和多态性。
2. ( )是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。
3. 不同的对象,收到同一消息可以产生不同的结果,这种现象称为( )。
4. 编译时的多态性是通过( )来实现的。
5. 运行时的多态性是通过( )来实现的。
6. ( )是对一组具有共同属性特征和行为特征的对象的抽象。
7. ( )是一个类所描述的一个具体的对象。
8. 类和对象之间的关系是( )的关系。
9. ( )就是从众多的事物中抽取出共同的、本质性的特征,舍弃其非本质的特征。
10. 子类继承了多个父类的数据结构和方法,则称为( )。
11. 面向对象程序设计方法的基本特征主要有( )、封装性、继承性和多态性。
12. 面向对象程序设计方法的基本特征主要有抽象性、封装性、( )和多态性。
13. 面向对象程序设计方法的基本特征主要有抽象性、封装性、继承性和( ) 。
14. 把面向对象思想应用于软件开发过程中,指导开发活动的系统方法,简称()方法。
15. 20世纪90年代中期由Booch,Rumbaugh和Jacoson共同提出了( ),把众多面向对象分析和设计方法综合成一种标准,使面向对象的方法成为主流的软件开发方法。
第二章类与对象一.阅读程序题1. #include<iostream.h>class CSample{int i;public:CSample(){i=1; cout<<i++;}void disp(){cout<<++i;}~CSample(){cout<<i++;}};void main(){CSample s;s.disp();}2. #include<iostream.h>class Sample{private:int x;public:Sample(){ cout<<(x=0);}Sample(int i,int j) {cout<<(x=i+j);}~Sample(){cout<<x;}};void main(){Sample *p1=new Sample, *p2=new Sample(3,4);delete p1; delete p2; }3. #include <iostream.h>class Sample{public:Sample(){}Sample(int a){x=a;}Sample(Sample &a){x=a.x++;}void disp(){cout<<x++;}private:int x;};void fun(Sample &s1, Sample s2) {s1.disp ();s2.disp ();}void main(){Sample s1(2),s2=s1; fun(s2,s1);s1.disp ();s2.disp ();}4. #include<iostream.h>class Sample{int x;public:Sample(){x=0;}Sample(int a) {cout<<(x=a);}~Sample(){cout<<++x;}void disp(){cout<<x;}};void main(){Sample s1(2);s1.disp ();s1.~Sample ();}5. #include <iostream.h>class Sample{int x;public:Sample(){cout<<(x=0);}Sample(int i){cout<<(x=i);}~Sample(){cout<<x<<endl;}void disp(){cout<<x;}};void main(){Sample s(3);int i=0; if(i=0) {Sample s;s.disp ();}}6. #include <iostream.h>class Sample{public:Sample(){cout<<"Constructor"<<endl;}~Sample(){cout<<"Destructor"<<endl;}};void fn(int i){static Sample c;cout<<"i="<<i<<endl;}void main(){fn(20);}7. #include<iostream.h>class Sample{int n;public:Sample(int i){n=i;}friend int add(Sample &s1,Sample &s2);};int add(Sample &s1,Sample &s2) {return s1.n+s2.n;}void main(){Sample s1(10),s2(20);cout<<add(s1,s2)<<endl;}8. #include<iostream.h>class B;class A{int i;public:int set(B&);int get(){return i;}A(int x){i=x;}};class B{int i;public:B(int x){i=x;}friend A;};int A::set(B &b){return i=b.i;}void main(){B b(2);cout<<a.get()<<",";a.set(b);cout<<a.get()<<endl;}9. #include <iostream.h>float f(float x, float y){return x+y;}int f(int x, int y){return x+y;}void main(){float a, b, c;a =b = 50.5;c = f(a, b);cout << c;}10. #include <iostream.h>int max(int x, int y){if(x > y) return x;else return y;}int max(int x, int y, int z){return max(x, max(y, z));}void main(){int a = 3, b = 4, c = 5, d = 0; d = max(a, b);cout << d;}11. #include <iostream.h>int p(int x = 4, int y = 5) {return x + y;}void main()int a = 3, b = 4, c = 0; c = p(b);cout << c;}12. #include <iostream.h>int add(int x, int y = 8);void main(){int a = 6; cout << add(a, add(a)) << endl;}int add(int x, int y){return x + y;}13. #include <iostream.h>int p(int x = 4, int y = 5, int z = 6) {return x + y + z;}void main(){int a = 3, b = 4, c = 5; c = p(b, a);cout << c;}14. #include <iostream.h>int p(int x = 4, int y = 5, int z = 6) {return x + y + z;}void main(){int a = 3, b = 4, c = 0; c = p(b, c);cout << c;}15. #include <iostream.h>int n = 1; void Fun();void main(){n++;Fun();if(n > 0) {int n = 5; cout<< "Block:n=" << n << ",";cout << "Main:n = " <<n<< endl;}void Fun(){int n = 10; cout << "Fun:n="<<n << ",";}二.完成程序题1. 有一个学生类student,包括学生姓名、成绩,设计一个友元函数,比较两个学生成绩的高低,并求出最高分和最低分的学生。
郑州大学远程教育 《面向对象程序设计》第01章在线测试
《面向对象程序设计》第01章在线测试剩余时间:58:16答题须知:1、本卷满分20分。
2、答完题后,请一定要单击下面的“交卷”按钮交卷,否则无法记录本试卷的成绩。
3、在交卷之前,不要刷新本网页,否则你的答题结果将会被清空。
第一题、单项选择题(每题1分,5道题共5分)1、下面的数据类型不属于C++基本数据类型的是A、整型B、数组型C、双精度型D、无值型2、下面的常量类型不属于C++常量类型的是A、整型B、字符串型C、枚举型D、浮点型3、VC项目中可以添加的文件类型不可以是A、.CPPB、.CC、.HD、.LIB4、下列关于条件语句的描述中,错误的是A、if语句中只有一个else子句B、if语句中可以有多个else if子句C、if 语句中if体内不能是开关语句D、if语句的if体内可以是循环语句5、下面程序段的输出结果为 int x=3;do{cout<<x-=2;} while(!(--x));A、1B、1 –2C、3 0D、死循环第二题、多项选择题(每题2分,5道题共10分)1、高级语言源程序需要经过那些步骤才能成为可执行文件?A、编辑B、编译C、连接D、格式化2、下面关于变量的特征错误的描述的是A、变量表示一个内存位置B、变量的类型表示的是内存的大小C、变量中保存的都是一个数值D、变量可以任意赋值3、下面关于while和do-while说法错误的是A、do-while的循环体至少执行一次B、while的循环控制条件比do-while严格C、do-while允许从外部转到循环体内D、do-while的循环体不能是复合语句4、下面函数声明正确的是A、void f1(int a,int b);B、void f2(int a,int c,int b=-1);C、void f3(int a ,int b=-1, int c);D、int f4(…);5、执行下面程序后,a和b的值分别为 void main() { int a, b, k=4, m=6,*p1=&k,*p2=&m; a=p1==&m;b=(-*p1)/(*p2)+7; cout <<a<<b<<endl;}A、0B、4C、7D、3第三题、判断题(每题1分,5道题共5分)1、定义时使用关键字 inline的函数叫做内联函数。
面向对象程序设计复习题(附参考答案)
【题目】【题型:单选题】【难度:中】【考核能力:理解】【漏选得分:是】【自动判分:是】【应用类别:终考】【特殊标签:】机器语言中的指令编码为()编码。
[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程序时使用的命令是()。
郑州大学现远程教育《面向对象程序设计》
郑州大学现代远程教育《面向对象程序设计》(计算机科学与技术本科)课程作业请保存为WORD格式的文档,登陆学习平台(/)提交,务必检查提交是否成功。
要求:建议1-3选一题,4-7选一题,8-10任选一题,且所有学生题目要相同。
1、编写一个程序模拟超市的收银系统。
具体要求如下:(1)提示输入顾客买的商品名称和单价(以元为单位),直到所有购买商品输入完毕(空格键表示输入完毕)。
(2)在屏幕上输出顾客购买的所有商品的名称和单价,每种商品的总价,顾客应付钱数;(3)提示输入实际交的钱数,计算应找钱数并显示。
(4)按回车键返回第一步,按ESC 键推出程序运行。
程序运行结果如下所示:输入商品名称:薯片输入单价:1.00输入数量:10输入商品名称:洗衣粉输入单价:9.8输入数量:1(按空格键,退出输入过程)商品名称单价数量总价薯片 1.00 10 10洗衣粉9.8 1 9.8应付: 19.8(元)输入实际付: 20元找零:0.2元(按回车键返回第一行)商品名称:×××。
(按ESC 则退出)2、编写一个程序实现24小时计时转换为12进制计时。
具体要求:以四位整数表示24小时计时法时间,pm表示下午,am表示上午运行示例:例1:输入24小时计时法时间: 174312小时计时法时间:1743 是 5.43 p.m.例2:输入24小时计时法时间: 090412小时计时法时间:0904 is 9.04 a.m.3、编写一个简单的加密程序:输入四位整数,按照以下加密算法处理后,生成加密后的四位整数输出。
加密算法:(每一位的数字+8)mod 10,处理后的数字中第1位和第四位交换,第2位和第3位交换。
运行示例:输入四位整数: 7523加密后的四位整数是: 10354、编写一个简单的学生成绩管理系统。
具体要求如下:建立两个类 StudentList 和StudentListTester. StudentList类用数组存放一组Student对象,记录当前数组中记录的学生数量。
国家开放大学《面向对象程序设计(本)》章节自测参考答案
国家开放大学《面向对象程序设计(本)》章节自测参考答案第1章面向对象的程序设计概述一、单项选择题1.Java是一门()语言。
a. 汇编b. 面向过程的高级c. 面向对象的高级d. 机器2.机器语言中的指令编码为()编码。
a. 数字b. 符号c. 十进制d. 二进制3.更接近人类自然语言的计算机语言是()语言。
a. 机器b. 高级c. 汇编d. 数字4.对象是构成现实世界的一个独立单位,它具有自己的静态特征和()特征。
a. 动态b. 颜色c. 重量d. 状态5.类是对具有共同属性和行为的对象的抽象描述,每个对象称为该类的一个()。
a. 产品b. 成分c. 实例d. 元素6.Java语言的主要特点不包括()。
a. 处理文件b. 可移植性c. 面向对象d. 自动垃圾回收7.Java语言的主要特点不包括()。
a. 安全性b. 解释执行c. 多线程d. 处理字符串8.具有相同属性和服务的一组对象的模板称为()。
a. 概念b. 程序c. 代码d. 类9.把对象的属性和服务组合成一个独立的整体,尽可能隐蔽其内部的细节,这称为对象的()。
a. 开放性b. 继承性c. 封装性d. 多态性10.使用JDK编译Java程序时使用的命令是()。
a. javadocb. javacc. appletviewerd. java11.使用JDK运行Java程序时使用的命令是( )。
a. javab. javacc. appletviewer12.在JDK目录中,Java运行环境的根目录是( )。
a. demob. binc. libd. jre13.计算机语言发展所经历的四个阶段。
包括:①面向对象语言②机器语言③汇编语言④高级语言。
按照正确的发展顺序,应该依次是:( )。
a. ④③②①b. ②③④①c. ①②④③d. ①②③④14.关于使用Java语言进行软件开发的Java集成开发环境,说法正确的是:( )。
a. NetBeans、Eclipse都为软件开发者提供的免费、开源的Java集成开发环境。
郑大远程面向对象程序设计试题
《面向对象程序设计》第12章在线测试第一题、单项选择题(每题1分,5道题共5分)1、面向对象软件开发中使用的OOD表示()A、面向对象分析B、面向对象设计C、面向对象语言D、面向对象方法2、在面向对象方法中,对象执行它的操作是通过()A、自动执行B、接受消息请求C、由外部强制执行D、外界直接访问其成员3、对象的两大要素是()A、数据和数据结构B、名字和函数C、属性和操作D、操作和方法4、关于对象模型的说法正确的事()A、对象模型是类、对象、类或对象之B、对象模型表示系统静态的数据性质间关系的定义集C、对象模型表示类/对象之间的结构D、对象模型是客观对象的物理模型关系5、面向对象分析的任务是()A、需求分析B、建立用例模型C、定义问题领域类D、定义角色第二题、多项选择题(每题2分,5道题共10分)1、下面那些是面向对象的特征?()A、结构B、类C、重用D、继承2、下面哪些属于UML的图( )A、用例图B、类图C、结构图D、流程图3、关于封装的说法正确的是()A、封装实现了信息隐藏B、封装使对象与外界隔绝C、封装使类不可见D、封装将对象的属性和操作结合在一起4、对象之间存在的关系包括()A、部分与整体B、一般与特殊C、实例连接D、消息连接5、下面的说法正确的是()A、软件就是程序,程序就是软件B、软件开发的过程就是程序设计的过程C、软件是程序、支持程序运行的数据以及与程序有关的文档资料的集合。
D、程序设计仅仅是软件开发过程的一个阶段。
第三题、判断题(每题1分,5道题共5分)1、面向对象设计过程一般仍分为结构设计和详细设计。
正确错误2、UML 是一种标准的图形化建模语言,它是面向对象分析与设计的一种标准表示。
正确错误3、UML不是一种可视化的程序设计语言而是一种可视化的建模语言.正确错误4、UML用若干个视图构造系统的模型,每个视图描述系统的一个方面。
正确错误5、类的关联关系通常采用函数设计方式。
正确错误《面向对象程序设计》第11章在线测试第一题、单项选择题(每题1分,5道题共5分)1、STL中算法访问容器的中介是()A、容器B、迭代器C、算法D、数组2、允许程序员以相同的方式处理不同的数据结构的是()A、容器B、迭代器C、算法D、数组3、列表list属于()A、顺序容器B、关联容器C、前向容器D、双向容器4、映射(map)属于( )A、顺序容器B、关联容器C、前向容器D、双向容器5、多重映射(multimap)属于( )A、顺序容器B、关联容器C、前向容器D、双向容器第二题、多项选择题(每题2分,5道题共10分)1、按照算法对容器的影响可以将算法分成()A、可变序列算法B、非可变序列算法C、排序算法D、数值计算算法2、下面属于容器的头文件是()A、vectorB、listC、queneD、set3、下面的说法正确的是()A、STL中有sort函数,所以程序员不能定义名字叫sort的函数B、STL中的sort函数在名字空间之外C、程序员可以在自定义的名字空间内定义sort函数D、使用STL的sort函数可以在源程序的开头加入using namespace std4、下面属于顺序容器的是()A、向量B、双队列C、堆栈D、列表5、如果char str[]=“China!Great Wall”,生成string类型s并且s的字符串内容也是“China!Gr eat Wall”的语句是()A、string s(str);B、string s(str,1);C、string s(str, 1,11);D、string s=str;第三题、判断题(每题1分,5道题共5分)1、迭代器是算法访问容器的中介。
《面向对象程序设计》第12章在线测试
C、实例连接通过对象的操作)C
A、需求分析
B、建立用例模型
C、定义问题领域类
D、定义角色
5、描述相互协作的对象之间的交互关系和连接关系的是()C
A、类图
B、顺序图
C、协作图
D、用例图
第二题、多项选择题(每题2分,5道题共10分)
1、下面那些是面向对象的特征?()BCD
A、结构
B、类
C、重用
D、继承
2、下面哪些属于UML的图( )AB
A、用例图
B、类图
C、结构图
D、流程图
3、关于多态的说法正确的是()ABC
A、不同类型的对象接收相同的消息产生不同的行为
B、多态的成员函数需要定义为虚函数
C、在C++中通过基类指针调用虚函数实现多态
第一题、单项选择题(每题1分,5道题共5分)
1、面向对象软件开发中使用的OOA表示()A
A、面向对象分析
B、面向对象设计
C、面向对象语言
D、面向对象方法
2、面向对象的方法学是一种基于()的方法学D
A、数据
B、操作
C、对象
D、实体
3、关于实例连接的说法正确的是()B
A、实例连接表现了对象之间的动态联系
D、多态是指对象的多种表现形式
4、下面的说法正确的是()CD
A、软件就是程序,程序就是软件
B、软件开发的过程就是程序设计的过程
C、软件是程序、支持程序运行的数据以及与程序有关的文档资料的集合。
D、程序设计仅仅是软件开发过程的一个阶段。
5、下面关于面向对象的特征说法正确的是()ACD
A、每一个对象都具有唯一的标识
面向对象的程序设计试题库
面对对象的程序设计一、单项选择题1、下面那种结构不是C++的限制结构()A 依次结构B 选择结构C 循环结构D 推断结构答: D2、下列是C++语言中合法标识符的是()。
A.3three B.ifC._1oneD.while答:C3、下列是合法的C++语言语句的是()。
A.if(x>0) then x=x-1;else x=x+1;B.if(x>0) x=x-1;else x=x+1;C.if x>0 x=x-1;else x=x+1;D.if x>0 x=x-1;答:B4、下面那一种不是计算机内部表示整数的方法()A 二进制码B原码C 补码D反码答:A5、在C++语言中,下列数为合法的实数的是()。
A.5E-3B.5E-3.5答:A6、C++语言中数据类型最大的是()A longB floatC intD char答:B7、假如一个函数可以在定义中干脆或间接的调用自己,这样的函数称为()。
A.函数声明B.嵌套函数C.定义函数D.递归函数答:D8、表达式0x55^0xB4的结果为()。
A.0xF5B.0x15C.0xE1D.0x1E答:C9、C++中,源代码文件后缀为()A .cppB .objC .exeD .c答: A10、0X5A&0XB7结果是()A 0X13B 0X12C 0X14D 0X15答: B二、填空题1、程序的基本限制结构包括()、()和()。
答:依次结构,选择结构,循环结构2、用来解决问题的,与有限多个步骤组成的详细过程称为()。
答:算法3、整数类型变量a和b被初始化为3和10,则循环语句while(a<=b) a=a+2;共执行()次,执行完语句后a的值为(),b的的值为()。
答:4,11,104、在程序编译阶段的错误主要分为两类()和()。
答:警告信息,致命错误5、计算机中的数据可以分为()和()两大类。
答:数值型、字符型6、字符型数据有两种编码方法:()和()答:有美国国家标准局制定的ASCII码、IBM公司提出的EBCDIC码7、通过C++ 语言中的()机制,可以从现存类中构建其子类。
2017郑大Java程序设计
《Java程序设计》第01章在线测试《Java程序设计》第01章在线测试剩余时间:59:24答题须知:1、本卷满分20分。
2、答完题后,请一定要单击下面的“交卷”按钮交卷,否则无法记录本试卷的成绩。
3、在交卷之前,不要刷新本网页,否则你的答题结果将会被清空。
第一题、单项选择题(每题1分,5道题共5分)1、编译Java Application 源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为( )。
A、javaB、classC、htmlD、exe2、设 x = 1 , y = 2 , z = 3,则表达式 y+=z--/++x 的值是( )A、3B、3.5C、4D、53、Java application中的主类需包含main方法,以下哪项是main方法的正确形参?()A、String argsB、String args[]C、Char argD、StringBuffer args[]4、如下哪个是Java中有效的关键字()A、nameB、helloC、falseD、good5、阅读下列代码; public class Test{ String s="One World One Dream"; public static void main(String args[]){System.out.println(s); } } 其运行结果是______。
A、argsB、One World One DreamC、cD、编译时出错//除非创建Text类的对象第二题、多项选择题(每题2分,5道题共10分)1、如下哪些是Java中的标识符( ) A、 BA、fieldnameB、widthC、3numberD、#number2、下面main()方法的定义哪些是正确的( )?A、public static void main(String args[]){}B、public static void main(String[]) {}C、public static void main(String[] args) {}D、public static void main(String x) {}3、关于 for循环、 while循环和do…while循环的说法哪些正确?()A、while循环判断条件一般是程序结果B、for循环的判断条件一般是非程序结果C、do…while循环是先循环后判断,所以循环体至少被执行一次D、这几种循环任何时候都不可以替换4、下面哪些是java语言的主要特征()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《面向对象程序设计》第02章在线测剩余时间:59:56试答题须知:1、本卷满分20分.2、答完题后,请一定要单击下面的“交卷”按钮交卷,否则无法记录本试卷的成绩。
3、在交卷之前,不要刷新本网页,否则你的答题结果将会被清空。
第一题、单项选择题(每题1分,5道题共5分)1、在关键字public后面定义的成员为类的()成员。
A、私有B、公用C、保护D、任何2、当一个类对象结束它的生存期的时侯,系统自动调用该类的( )。
A、无参构造函数B、带参构造函数C、拷贝构造函数D、析构函数3、类的构造函数被自动调用执行的情况是在定义该类的 ( )A、成员函数时B、数据成员时C、对象时D、友元函数时4、假定AB为一个类,则执行“AB *p=new AB(1,2);”语句时共调用该类构造函数的次数为( )。
A、0B、1C、2D、35、假定AB为一个类,px为指向该类的一个含有n个对象的动态数组的指针,则执行“delete []px;"语句时共调用该类析构函数的次数为( )。
A、0B、1C、nD、n+1第二题、多项选择题(每题2分,5道题共10分)1、下面有关类说法正确的是(A,B,D )A、一个类可以有多个构造函数B、一个类只有一个析构函数C、析构函数需要指定参数D、在一个类中可以说明具有类类型的数据成员2、关于封装,下列说法中正确的是()。
A、通过封装,对象的全部属性和操作结合在一起,形成一个整体B、通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见)C、通过封装,每个对象都成为相对独立的实体D、通过封装,对象的属性都是不可见的3、定义析构函数时,错误的说法是()。
A、其名与类名完全相同B、返回类型是 void 类型C、无形参,也不可重载D、函数体中必须有 delete 语句4、假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的语句错误的是()。
A、x.aB、x.a()C、x->GetValue()D、x.GetValue()5、下面关于成员函数的说法错误的是()A、类定义中只能说明函数成员的函数头,不能定义函数体B、类中的函数成员可以在类体中定义,也可以在类体之外定义C、类中的函数成员在类体之外定义时必须要与类声明在同一文件中D、在类体之外定义的函数成员不能操作该类的私有数据成员第三题、判断题(每题1分,5道题共5分)1、假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象中数据成员a的格式为x—>a。
正确错误2、所谓私有成员是指只有类中所提供的成员函数才能直接使用它们,任何类以外的函数对它们的访问都是非法的.正确错误3、某类中的友元类的所有成员函数可以存取或修改该类中的私有成员.正确错误4、建立类的对象时,先调用各个对象成员的构造函数,初始化相应的对象成员,然后才执行类的构造函数,初始化类中其他成员.正确错误5、 this是一个隐含于每一个类的成员函数的特殊指针,它是一个指向正在被某个成员函数操作的对象的指针。
正确错误交卷恭喜,交卷操作成功完成!你本次进行的《面向对象程序设计》第02章在线测试的得分为20分(满分20分),本次成绩已入库。
若对成绩不满意,可重新再测,取最高分。
测试结果如下:• 1.1 [单选] [对] 在关键字public后面定义的成员为类的( )成员。
•1。
2 [单选] [对] 当一个类对象结束它的生存期的时侯,系统自动调用该类的( ).• 1.3 [单选][对] 类的构造函数被自动调用执行的情况是在定义该类的 ( )•1。
4 [单选] [对]假定AB为一个类,则执行“AB *p=new AB(1,2);”语句时共调用该类构造函数的次数为( )。
• 1.5 [单选][对]假定AB为一个类,px为指向该类的一个含有n个对象的动态数组的指针,则执行“delete []px;”语句时共调用该类析构函数的次数为( ).• 2.1 [多选][对]下面有关类说法正确的是(A,B,D )• 2.2 [多选] [对] 关于封装,下列说法中正确的是( ).• 2.3 [多选] [对]定义析构函数时,错误的说法是 ( ) .• 2.4 [多选] [对] 假定AA为一个类,a为该类私有的数据成员,GetVa lue()为该类公有函数成员,它返回a的值,x为该类的一个对象,则访问x对象中数据成员a的语句错误的是()。
• 2.5 [多选] [对]下面关于成员函数的说法错误的是()•3。
1 [判断] [对]假定AA为一个类,a为该类公有的数据成员,x 为该类的一个对象,则访问x对象中数据成员a的格式为x—>a。
•3。
2 [判断] [对] 所谓私有成员是指只有类中所提供的成员函数才能直接使用它们,任何类以外的函数对它们的访问都是非法的。
• 3.3 [判断] [对]某类中的友元类的所有成员函数可以存取或修改该类中的私有成员。
• 3.4 [判断] [对]建立类的对象时,先调用各个对象成员的构造函数,初始化相应的对象成员,然后才执行类的构造函数,初始化类中其他成员。
•3。
5 [判断] [对] this是一个隐含于每一个类的成员函数的特殊指针,它是一个指向正在被某个成员函数操作的对象的指针.面向对象程序设计》第03章在线测试剩余时间:59:56答题须知:1、本卷满分20分.2、答完题后,请一定要单击下面的“交卷”按钮交卷,否则无法记录本试卷的成绩.3、在交卷之前,不要刷新本网页,否则你的答题结果将会被清空。
第一题、单项选择题(每题1分,5道题共5分)1、假定AB为一个类,则执行“AB r1=r2;"语句时将自动调用该类的().A、无参构造函数B、带参构造函数C、赋值重载函数D、拷贝构造函数2、假定 ab 为一个类,则执行 ab x ;语句时将自动调用该类的( ) 。
A、有参构造函数B、无参构造函数C、拷贝构造函数D、赋值构造函数3、类的构造函数被自动调用执行的情况是在定义该类的 ( )A、成员函数时B、数据成员时C、对象时D、友元函数时4、一段程序的定义如下,在函数f()中将动态对象的成员n的值改为34的语句应该为( ) class A { int n; public: setn(in t nl) {n=nl;} A(int x){n = x; } } int f(){A * ptr = new A(45);。
.。
}A、A。
n=34;B、ptr.setn(34);C、ptr—>setn(34);D、setn(34);5、假定AB为一个类,px为指向该类的一个含有n个对象的动态数组的指针,则执行“del_ete []px;”语句时共调用该类析构函数的次数为( )。
A、0B、1C、nD、n+1第二题、多项选择题(每题2分,5道题共10分)1、下列可以作为类的成员的是( )A、自身类对象的指针B、自身类对象C、自身类对象的引用D、另一个类的对象2、下面关于成员函数的说法错误的是()A、类定义中只能说明函数成员的函数头,不能定义函数体B、类中的函数成员可以在类体中定义,也可以在类体之外定义C、类中的函数成员在类体之外定义时必须要与类声明在同一文件中D、在类体之外定义的函数成员不能操作该类的私有数据成员3、下面关于静态数据成员的说法错误的是()A、静态数据成员是类的所有对象所共有的B、静态数据成员要在构造函数内初始化C、类的每个对象有自己的静态数据成员D、静态数据成员不能通过类的对象调用4、假定AB为一个类,则执行“AB *s=new AB(a,5);”语句的结果是A、动态生成对象AB赋值给变量sB、动态生成对象sC、如果对象AB中有公有成员a,则s—>a可以访问该成员D、动态生成对象AB,该对象的地址赋值给变量s5、下面关于常对象的说法正确的是()A、在定义常对象时必须进行初始化。
B、常对象的数据成员不能被更新。
C、常对象不能作为类的成员。
D、通过常对象可以调用该对象的成员函数。
第三题、判断题(每题1分,5道题共5分)1、若Sample类中的一个成员函数说明如下: Void set(Sample &a)其中Sample &a表示的含义是。
a是类Sample的对象引用,用来作函数Set()的形参。
正确错误2、所谓私有成员是指只有类中所提供的成员函数才能直接使用它们,任何类以外的函数对它们的访问都是非法的。
正确错误3、某类中的友元类的所有成员函数可以存取或修改该类中的私有成员。
正确错误4、静态成员函数允许访问类的数据成员。
正确错误5、建立类的对象时,先调用各个对象成员的构造函数,初始化相应的对象成员,然后才执行类的构造函数,初始化类中其他成员.恭喜,交卷操作成功完成!你本次进行的《面向对象程序设计》第03章在得分为20分(满分20分),本次成绩已入库。
若对成绩不满意,可重新再测,取最测试结果如下:•1。
1 [单选] [对] 假定AB为一个类,则执行“AB r1=r2;"语句时将自动调( )。
• 1.2 [单选] [对] 假定 ab 为一个类,则执行 ab x ;语句时将自动调用该类• 1.3 [单选][对] 类的构造函数被自动调用执行的情况是在定义该类的 (• 1.4 [单选] [对] 一段程序的定义如下,在函数f()中将动态对象的成员34的语句应该为 ( ) class A { int n; public: setn(int nl) {n=nl;x) {n = x; } } int f() {A * ptr = new A(45);.。
. }•1。
5 [单选] [对]假定AB为一个类,px为指向该类的一个含有n个对象的的指针,则执行“del_ete []px;"语句时共调用该类析构函数的次数为(• 2.1 [多选][对]下列可以作为类的成员的是( )•2。
2 [多选] [对]下面关于成员函数的说法错误的是( )•2。
3 [多选] [对] 下面关于静态数据成员的说法错误的是()•2。
4 [多选][对]假定AB为一个类,则执行“AB *s=new AB(a,5);”果是• 2.5 [多选] [对] 下面关于常对象的说法正确的是()•3。
1 [判断][对]若Sample类中的一个成员函数说明如下: Void set(Sa 其中Sample &a表示的含义是。
a是类Sample的对象引用,用来作函数Set(• 3.2 [判断][对]所谓私有成员是指只有类中所提供的成员函数才能直接任何类以外的函数对它们的访问都是非法的.• 3.3 [判断] [对]某类中的友元类的所有成员函数可以存取或修改该类中的•3。
4 [判断] [对]静态成员函数允许访问类的数据成员.•3。