《面向对象程序设计》复习题
一、单项选择题
1.( A )是面向对象系统包含的要素。
A、类
B、多态
C、友元
D、重载
2.下列对常量的定义中,错误的是(C)。
A、MyClass const obj(3,4);
B、char * const p="hello";
C、int i=1; const int &ref=i;
D、void show() const;
3.若有如下函数声明:void Fun(int x);,则下列(D)能与该函数进行重载。
A、void Fun(int y);
B、void Fun(int x,int y='1');
C、int Fun(int x);
D、void Fun(int) const;
4.下列对构造函数和析构函数的描述中,错误的是(B)。
A、构造函数可以重载
B、析构函数名与类名相同
C、构造函数中可以设置参数的缺省值
D、类中只有一个析构函数
5.下列对友元的描述中,错误的是(C)。
A、友元破坏了类的封装性
B、友元提高了程序的运行效率
C、友元可以在类外声明和定义
D、友元能够访问类中的私有成员
6.下列对继承的描述中,正确的是(C)。
A、派生类对象能够访问基类的公有成员
B、派生类继承了基类的公有成员和保护成员
C、派生类对象不能访问基类的保护成员
D、派生类不改变基类成员的访问权限
7.程序中,编译时出错的语句是(B)。
class Base{ };
class Derived : public Base { };
Derived objD1;
Base objB=objD1; //A
Base *pb=&objD1; //B
Base &refB=objD1; //C
Derived objD2=objB; //D
8.下面对派生类的描述中,正确的是(B)。
A、派生类是对基类的具体化
B、一个派生类可以作为另一个派生类的基类
C、派生类只能有一个直接基类
D、派生类的缺省继承方式是public
9.实现动态联遍必须通过(A)调用虚函数。
A、对象引用
B、成员名限定
C、对象名
D、构造函数
10.C++流中重载的运算符>>,是一个(B )。
A、用于输出操作的非成员函数
B、用于输入操作的非成员函数
C、用于输出操作的成员函数
D、用于输入操作的成员函数
11.( A )不是面向对象系统包含的要素。
A、多态
B、对象
C、类
D、继承
12.下列对常量的定义中,错误的是(C)。
A、int const size=10;
B、char * const p="Good Luck";
C、void const print();
D、const MyClass obj(10,10);
13.设Address表示整型变量x的地址,则下列语句执行后的输出结果为(D)。
int x=100,&r=x;
cout< A、Address-100 B、100-Address C、Address-Address D、100-100 14.若函数原型为void Fun(int x=9,int y=8,char z='7'),则下列调用错误的是(B )。 A、Fun() B、Fun(3, '0') C、Fun(1,2) D、Fun(2,4, 'a') 15.若有如下函数声明:void Fun(int x);,则下列(C)不能与该函数进行重载。 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; 16.下列对构造函数和析构函数的描述中,正确的是(A)。 A、析构函数不可以重载 B、构造函数不能定义为内联函数 C、构造函数中不能设置参数的缺省值 D、析构函数名与类名不同 17.下面对静态成员的描述中,错误的是(C)。 A、静态成员的提出是为了解决数据共享问题 B、静态数据成员的初始化在类体外进行 C、类的不同对象有不同的静态数据成员值 D、静态成员函数可以直接访问类中的静态数据成员 18.下列对友元的描述中,正确的是(D)。 A、友元可以在类外声明和定义 B、友元降低了程序的运行效率 C、友元不能访问类中的保护成员 D、友元破坏了类的封装性 19.下列对继承的描述中,错误的是(C)。 A、派生类对象不能访问基类的保护成员 B、派生类对基类成员的访问权限随着继承方式而改变 C、派生类成员可以访问基类的私有成员 D、派生类继承了基类的所有成员 20.程序中,编译时出错的语句是(D)。 class Base{ }; class Derived : public Base { }; Derived objD1; Base objB=objD1; //A Base *pb=&objD1; //B Base &refB=objD1; //C Derived objD2=objB; //D 21.下面对派生类的描述中,错误的是(A)。 A、派生类是对基类的具体化 B、派生类能够作为基类继续派生新类 C、派生类可以有多个直接基类 D、派生类的缺省继承方式是private 22.实现动态联遍不能通过(A)调用虚函数。 A、构造函数 B、对象引用 C、对象指针 D、成员函数 23.下面(D)不是抽象类的特性。 A、可以说明纯虚函数 B、不能说明抽象类的对象 C、用做基类,提供公共的接口 D、可以定义虚构造函数 24.C++流中重载的运算符<<,是一个( B )。 A、用于输出操作的成员函数 B、用于输出操作的非成员函数 C、用于输入操作的成员函数 D、用于输入操作的非成员函数 二、程序填充题 1.下列运算符既可以作为类的成员函数重载,也可以作为类的友元函数重载,请在 1.答案: (1) a.operator+(b) (2) operator +(a,b) (3) a.operator++(0) (4) operator –(0) 2.下列程序执行后的输出结果是12,21,22,请将下列程序补充完整。 #include 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=1; y=2; fun2(&x,&y); cout< x=1; y=2; fun3(x,y); cout< } 2.答案: (1) int a (2) int *a (3) *a=*b (4) int &a (5) a=b 3.下列程序执行后的输出结果是B0 D00 B1 D23 ~D ~B ~D ~B,请将下列程序补充 完整。 class Base { public: Base(int i=0) {x = i; cout<<'B'< ~Base() { cout<<"~B"< private: int x; }; class Derived : public Base { int y, z; public: __________________(1)________________________// Constructor __________________(2)________________________// Destructor }; void main() { Derived obj1; Derived obj2(1,2,3); } 3.答案:(1)Derived(int a=0,int b=0,int c=0): Base(a) { y=b; z=c; cout<<'D'< (2)~Derived() { cout<<"~D "; } 三、阅读程序题 1.#include class Test { public: Test (double m,double n,double d):p(d) { x=m; y=n; } void Show(); void Show() const; private: double x, y; const double p; }; void Test::Show() { cout< cout<<"p="< } void Test::Show() const { cout< cout<<"p="< } void main() { Test a(8.9,2.5,3.1416); a.Show(); const Test b(2.5,8.9,3.14); b.Show(); } 答案:8.9 2.5 p=3.1416 2.5 8.9 const p=3.14 const 2.#include class A{ public: A(int i){ cout<<"Constructor"< A(A& r){cout<<"Copy constructor"< ~A(){cout<<"Destructor"< A& A::operator =(A& r); void output() {cout<<*p< private: int *p; }; A& A::operator =(A& r) { cout<<"Assignment"< if(this==&r) return *this; delete p; p=new int(*r.p); return *this; }; void main(){ A a(5); A b=a; A c(6); c=a; c.output(); }; 答案:Constructor Copy constructor Constructor Assignment 5 Destructor Destructor Destructor 3.#include class Base1{ public: Base1(int x) { cout<<"Base1's con. "< ~Base1() { cout<<"Base1's des. "< }; class Base2{ public: Base2(int x) { cout<<"Base2's con. "< ~Base2() { cout<<"Base2's des. "< }; class Derived : public Base2,public Base1{ public: Derived(int x,int y):Base1(y),Base2(x) { cout<<"Derived's con."< ~Derived() { cout<<"Derived's des."< }; void main(){ Derived obj(1,2); } 答案:Base2's con. 1 Base1's con. 2 Derived's con. Derived's des. Base1's des. Base2's des. 简答题 1、传统的结构化程序设计的优点和缺点是什么? 优点: (1)这种程序设计方法力求算法描述准确。 (2)对每一子过程模块容易进行程序正确性证明。 缺点: (1)这种程序设计方法本质上是面向“过程”的,而“过程”和“操作”又是不稳定和多变的,因此不能直接反映人类求解问题的思路。 (2)程序代码可重用性差。程序中除少数标准库函数外,每设计一个程序时,程序员几乎从零做起。即使重用代码,通常也是通过拷贝或编辑重新生成一份。 (3)维护程序的一致性困难。该种方法将数据与对数据进行处理的程序代码分离。 2、什么是对象? 每个对象都具有属性(Attribute)和方法(Method)这两方面的特征。对象的属性描述了对象的状态和特征,对象的方法说明了对象的行为和功能,并且对象的属性值只应由这个对象的方法来读取和修改,两者结合在一起就构成了对象的完整描述。 3、什么是消息? 在面向对象的程序设计中,由于对象描述了客观实体,它们之间的联系通过对象间的联系来反映。当一个对象需要另外一个对象提供服务时,它向对方发出一个服务请求,而收到请求的对象会响应这个请求并完成指定的服务。这种向对象发出的服务请求就称为消息。4、什么是多态性? 所谓多态性是指当程序中的其他部分发出同样的消息时,按照接收消息对象的不同能够自动执行类中相应的方法。其好处是,用户不必知道某个对象所属的类就可以执行多态行为,从而为程序设计带来更大方便。 5、什么是面向对象的程序设计方法? 这种方法将设计目标从模拟现实世界的行为转向了模拟现实世界中存在的对象及其各自的行为。 在OOP中,将“对象”作为系统中最基本的运行实体,整个程序即由各种不同类型的对象组成,各对象既是一个独立的实体,又可通过消息相互作用,对象中的方法决定要向哪个对象发消息、发什么消息以及收到消息时如何进行处理等。 6、面向对象方法的特点是什么? (1)OOP以“对象”或“数据”为中心。由于对象自然地反映了应用领域的模块性,因此具有相对稳定性,可以被用作一个组件去构成更复杂的应用,又由于对象一般封装的是某一实际需求的各种成分,因此,某一对象的改变对整个系统几乎没有影响。 (2)引入了“类”(class)的概念。类与类以层次结构组织,属于某个类的对象除具有该类所描述的特性外,还具有层次结构中该类上层所有类描述的全部性质,OOP中称这种机制为继承。 (3)OOP方法的模块性与继承性,保证了新的应用程序设计可在原有对象的数据类型和功能的基础上通过重用、扩展和细化来进行,而不必从头做起或复制原有代码,这样,大大减少了重新编写新代码的工作量,同时降低了程序设计过程中出错的可能性,达到了事半功倍的效果。 7、面向对象的程序设计方法与结构化程序设计方法的比较 (1)传统的结构化程序设计方法以过程为中心构造应用程序,数据和处理数据的过程代码是分离的、相互独立的实体,设计出的程序可重用代码少,且当代码量增加时维护数据和代码的一致性困难。 《面向对象程序设计》 大作业 题目学生成绩管理系统 学院 专业 班级 姓名 指导教师 2015 年11 月11 日 目录 一大作业的目的 (1) 二大作业的内容............................ . .. (2) 三大作业的要求与数据............... ...... . (3) 四大作业应完成的工作.................. . (4) 五总体设计(包含几大功能模块)........... . (5) 六详细设计(各功能模块的具体实现算法——流程图) (6) 七调试分析(包含各模块的测试用例,及测试结果) (7) 八总结 (8) 十参考资料 (9) 一大作业的目的 《面向对象程序设计》是一门实践性很强的课程,通过大作业不仅可以全方位检验学生知识掌握程度和综合能力,而且还可以进一步加深、巩固所学课程的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。更好地掌握运用C++语言独立地编写、调试应用程序和进行其它相关设计的技能。 二大作业的内容 对学生信息(包括学号、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出.将学生的成绩信息进行记录,信息内容包含:(1)学生的学号(2)学生的姓名(3)学生的成绩。假设,现收集到了一个班学生的所有成绩信息,要求用C语言编写一个简单的成绩管理系统,可进行录入、查询、修改和浏览等功能。学习相关开发工具和应用软件,熟悉系统建设过程。 三大作业的要求与数据 1、用C++语言实现系统; 2、对学生信息(包括学号、姓名、语文、数学、英语、平均分)进行管理,包括学生成绩的信息输入、输出、查询、删除、排序、统计、退出. 3、学生信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能: (1) 每一条记录包括一个学生的学号、姓名、3门课成绩 (2)、成绩信息录入功能:(成绩信息用文件保存,可以一次完成若干条记录 的输入。) (3)、成绩信息显示浏览功能:完成全部学生记录的显示。 (4)、查询功能:完成按姓名查找学生记录,并显示。 (5)成绩信息的删除:按学号进行删除某学生的成绩. (6)、排序功能:按学生平均成绩进行排序。 (7)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观! 程序设计基础形考任务4: 1.算法的四种基本操作是逻辑运算、算数运算、数据比较、数据传送。 2.算法的控制结构有三种基本形式:顺序结构、选择结构、循环结构。 3.评价算法需要从几个不同的角度考虑,最主要的是正确性和运行效率。 4.算法的运行效率包括两方面,算法的时间复杂度和算法的空间复杂度。 5.结构化程序设计的总体思想是采用模块化结构,自顶向下、逐步求精。 6. 软件生存周期包括软件的定义、软件的开发和软件使用与维护3个部分。 7. 软件定义时期主要包括可行性研究和需求分析两个阶段。 8.软件开发时期是具体设计和实现在前一时期定义的软件,它由软件的设计阶段、实现阶段、集成阶段组成。 9.软件工程的目标是可概括为生产具有正确性、可用性以及开销合宜的产品。 10.软件开发模型大体上可分为两种类型,第一种是以软件需求完全确定为前提的瀑布模型。第二种是在软件开发初始阶段只能提供基本需求时采用的渐进式开发模型。 二、选择题(每题4分,合计40分) 2下列叙述中正确的是_____。 选择一项: A. 算法就是程序 B. 设计算法时只需要考虑结果的可靠性 C. 以上三种说法都不对 D. 设计算法时只需要考虑数据结构的设计 3下列叙述中正确的是_____。 选择一项: A. 一个算法的空间复杂度大,则其时间复杂度也必定大 B. 以上三种说法都不对 C. 一个算法的空间复杂度大,则其时间复杂度必定小 D. 一个算法的时间复杂度大,则其空间复杂度必定小 4一个算法应该具有“确定性”等5个特性,下面对另外4个特性的描述中错误的是()。选择一项: A. 有零个或多个输入 B. 可行性 C. 有穷性 D. 有零个或多个输出 5下面叙述正确的是()。 选择一项: A. 算法的时间复杂度是指执行算法所需要的计算工作量 B. 算法的效率只与问题的规模有关,而与数据的存储结构无关 C. 数据的逻辑结构与存储结构是一一对应的 D. 算法的时间复杂度与空间复杂度一定相关 6那一项不属于算法的四种基本的功能操作( ) 。面向对象程序设计考前复习题及答案
c++面向对象程序设计大作业
2019国开电大《程序设计基础》形考任务4答案
(完整版)《面向对象程序设计》答案