郑州大学现代远程教育《面向对象程序设计》课程考
核要求
说明:本课程考核形式为提交作业,完成后请保存为WORD 2003版本格式的文档,登陆学习平台提交,并检查和确认提交成功(能够下载,并且内容无误即为提交成功)。
一.作业要求
1.请独立自主完成作业内容。
二.作业内容
一)、简答题:(每题 5 分,共30 分)
1.什么是抽象类?它有什么特点?
答:
抽象类与接口紧密相关,它们不能示例化,并且常常部分实现或根本不实现。
特点:
1、抽象类不能直接实例化
2、允许(但不要求)抽象类包含抽象成员。
3、抽象类不能被密封
2.C++中使用多态的前提条件是什么?
答:动态多态的前提条件:
1.通过调用虚函数实现多态
2.通过基类的指针或引用调用虚函数
3.什么是类?类与结构有和不同?
答:类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,
都指向同一段实际对象分配的内存
不同:类有构造和析构函数,类可以继承和被继承
结构没有构造函数,但可以添加。结构没有析构函数,结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口。
4.面向对象的特征有哪些?
答:封装,继承,多态
5. 简述this指针的含义是什么?
答:this指针是一个隐含于每一个成员函数中的特殊指针。它是一个指向正在被该成员函数操作的对象,也就是要操作该成员函数的对象。
6. 友元关系具有什么特点?
答:友元函数的特点是能够访问类中的私有成员的非成员函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样。
二)、分析下面的代码,回答问题(每题 10 分,共 40 分)
1.分析下面的代码,指出其中的错误,说明理由并改正
class C {
public:
int fn1( int x ) {
dm = x ;
}
private:
int dm;
};
void main ( ) {
C c;
c.fn1(16 );
cout << c.dm << ‘\n’;
}
答://dm为私有变量,是不能通过对象直接访问的,正确的做法是添加一个public类型的方法,如public void Show(){cout< 2.下面代码的执行结果是什么?为什么? class A{ int n; public: A() {}; A(int i){n=i;} ~A() { cout<<"n="< }; class B { A a; int m; public: B(int i,int j):a(i){m=j;} ~B(){cout<<"m="< }; void main() { B b(1,2); } 答:执行结果: n=1 m=2 原因:b对象里包含一个A类的对象,b对象在析构时先调用A的析构函数,再调用B自身的析构函数 3.下面代码的执行结果是什么?为什么? class Sample{ int n; public: Sample(){}; Sample(int i){n=i;}; Sample& operator=(Sample); void disp(){cout<<"n="< }; Sample & Sample::operator=(Sample s) { Sample::n=s.n; return *this; } void main() {Sample s1(10),s2; s2=s1; s2.disp(); } 答:结果: n=10 Sample重载了赋值操作符,可以用Sample的一个对象去初使化另一个对象,s2对象被已经初使化的s1所初使化 4. 下面代码的执行结果是什么?为什么? class A{ A(char *s) {cout< ~A(){}; }; class B:virtual public A { public: B(char *s1,char*s2):A(s1) { cout< } }; class C:virtual public A { public: C(char* s1,char* s2) : A(s1) { cout< } }; class D: public B, public C { public: D(char *s1,char *s2,char *s3,char *s4):B(s1,s2),C(s1,s2),A(s1) { cout< } }; 创建对象的语句: D d(“class A”,”class B”,”class C”,”class D”);执行结果是什么?为什么? 答:执行结果: class A class B class D 三)、根据要求编写完整程序:(每题15分,共 30 分) 1.设计复数类的加法运算操作,使之能够执行下列运算:( 15 分)Complex x(3,6), y(4,5), z(0,0); z = x + y; z=2.4 + x; z=y + 3.5 答:class complex{ public: complex(int r=0,int i=0);//构造 complex operator+(const complex& other); complex Complex::operator+(const int &a); void complex::input() protected: int real,image; }; void complex::input() { int real,image; cout << "please enter a complex: " << endl; cin>>r>>m; real = r; image = m; } complex::complex(int r,int i) { real=r; image=i; return; } complex complex::operator+(const complex& other) { complex temp; temp.real=real+other.real; temp.image=image+other.image; return temp; } complex complex::operator+(const int &a) { complex temp; temp.real= real +a; temp.image = image; return temp; } int main(int argc,char* argv[]) { complex a,b,c; a.input(); b.input(); c = a +b; //输出 c = 5 +a; //输出 c = b +5; //输出 } } 2. 设计High类,其数据成员为高h,定义虚函数disp()。由High 派生出长方体类Cuboid与圆柱体类Cylinder。在主函数中用基类指针变量p调用虚函数disp()显示长方体与圆柱体的体积。(15分) 答:class High{ public: unsigned int h; virtual void disp(){}; }; class Cuboid:public High{ Public: unsigned int length; unsigned int width; virtual void disp(){cout< Class Cylinder:public High{ Public: unsigned int r;//半径 virtual void disp(){cout<<3.14159*r*r*h< void main() { High *p; Cuboid objA; Cylinder objB; objA.h=20; objA.length=3; objA.width=4; p=&objA; p->disp(); objB.r=5; objB.h=10; p=&objB; p->disp(); } 第3章面向对象程序设计基础 第3章面向对象程序设计基础 【1】什么是Java程序使用的类?什么是类库? 答:类是将一类事物的特性描述出来,然后如果用这个类来定义对象,则该对象就拥有了这个类所描述的所有特性。 在Java系统中,系统定义好的类根据实现的功能不同,可以划分成不同的集合,每个集合称为一个包,所有包合称为类库。 【2】如何定义方法?在面向对象程序设计中方法有什么作用? 答:方法的定义由两部分组成:方法声明和方法体。 方法的声明如下: 返回值类型方法名(参数类型形式参数1,参数类型形式参数2…){ 程序代码; 返回值; } 在面向对象程序设计中,方法的作用是完成对类和对象属性操作。 【3】简述构造方法的功能和特点。下面的程序片段是某学生为student类编写的构造方法,请指出其中的错误。 void Student(int no,String name) { studentNo=no; studentName=name; return no; } 答:构造方法的功能是:构造方法是一个特殊的方法,主要用于初始化新创建的对象; 特点:构造方法的方法名要求与类名相同,用户不能直接调用,只能通过new运算符调用,而且构造方法是不返回任何数据类型,甚至也不返回void数据类型,即不能在构造方法前加void。 错误之处:(1)构造方法Student()前不能加void,(2)不能用return语句,(3)类名Student 首字母S改成小写s. 【4】定义一个表示学生的student类,包括的域有学号、姓名、性别、年龄,包括的方法有获得学号、姓名、性别、年龄及修改年龄。编写Java程序创建student类的对象及测试其方法的功能。 class Student { String id; String name; String sex; int age; void talk(){ 简答题 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)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观! 面向对象程序设计实验指导书 实验一、C++开发环境应用入门(2学时)(选做) 1、实验目的 (1)了解C++开发工具的特点 (2)熟悉C++开发环境 (3)学习用C++编写标准的C++程序 2、实验任务 使用C++来建立一个非图形化的标准C++程序,编译、运行下例程序: #include 第3章 面向对象程序设计基础
面向对象程序设计考前复习题及答案
c++面向对象程序设计大作业
面向对象程序设计实验指导书讲解
(完整版)《面向对象程序设计》答案