1、简答题1、传统的结构化程序设计的优点和缺点是什么?优点:(1)这种程序设计方法力求算法描述准确。(2)对每一子过程模块容易进行程序正确性证明。缺点:(1)这种程序设计方法本质上是面向“过程”的,而“ 过程 ”和“ 操作”又是不稳定和多变的,因此不能直接反映人类求解问题的思路。(2)程序代码可重用性差。程序中除少数标准库函数外,每设计一个程序时,程序员几乎从零做起。即使重用代码,通常也是通过拷贝或编辑重新生成一份。(3)维护程序的一致性困难。该种方法将数据与对数据进行处理的程序代码分离。 2、什么是对象?每个对象都具有属性(Attribute)和方法(Method)这两方面的特征。对象的属性描述
2、了对象的状态和特征,对象的方法说明了对象的行为和功能,并且对象的属性值只应由这个对象的方法来读取和修改,两者结合在一起就构成了对象的完整描述。 3、什么是消息?在面向对象的程序设计中,由于对象描述了客观实体,它们之间的联系通过对象间的联系来反映。当一个对象需要另外一个对象提供服务时,它向对方发出一个服务请求,而收到请求的对象会响应这个请求并完成指定的服务。这种向对象发出的服务请求就称为消息。4、什么是多态性?所谓多态性是指当程序中的其他部分发出同样的消息时,按照接收消息对象的不同能够自动执行类中相应的方法。其好处是,用户不必知道某个对象所属的类就可以执行多态行为,从而为程序设计带来更大方便。
3、5、什么是面向对象的程序设计方法?这种方法将设计目标从模拟现实世界的行为转向了模拟现实世界中存在的对象及其各自的行为。在 OOP 中,将 “对象”作为系统中最基本的运行实体,整个程序即由各种不同类型的对象组成,各对象既是一个独立的实体,又可通过消息相互作用,对象中的方法决定要向哪个对象发消息、发什么消息以及收到消息时如何进行处理等。 6、面向对象方法的特点是什么?(1)OOP 以“对象”或“数据”为中心。由于对象自然地反映了应用领域的模块性,因此具有相对稳定性,可以被用作一个组件去构成更复杂的应用,又由于对象一般封装的是某一实际需求的各种成分,因此,某一对象的改变对整个系统几乎没有影响。(2)
4、引入了“类” (class )的概念。类与类以层次结构组织,属于某个类的对象除具有该类所描述的特性外,还具有层次结构中该类上层所有类描述的全部性质,OOP 中称这种机制为继承。(3)OOP 方法的模块性与继承性,保证了新的应用程序设计可在原有对象的数据类型和功能的基础上通过重用、扩展和细化来进行,而不必从头做起或复制原有代码,这样,大大减少了重新编写新代码的工作量,同时降低了程序设计过程中出错的可能性,达到了事半功倍的效果。 7、面向对象的程序设计方法与结构化程序设计方法的比较(1)传统的结构化程序设计方法以过程为中心构造应用程序,数据和处理数据的过程代码是分离的、相互独立的实体,设计出的程序
5、可重用代码少,且当代码量增加时维护数据和代码的一致性困难。(2)面向对象程序设计方法中,对象所具有的封装性和继承性使得代码重用成为可能,并大大减少了程序出错的可能性。(3)面向对象方法吸收了结构化程序设计方法的优点,同时引入了新概念、新机制并建立了比传统方法更高层次的抽象。二、选择题略三、填空题(1)类是一个支持集成的抽象数据类型,而对象是类的 【1】 。【参考答案】【1】实例(2)在 C+语言的面向对象程序设计框架中, 【2】 是程序的基本组成单元。【参考答案】【2】类(3)C+语言程序的注释可以出现在程序中的任何地方,一个注释以 【3】 作为开始和结束的标记。【参考答案】 【3】/* */
6、(4)以下程序的输出结果是 【4】 。#include “iostream.h“void fun() static int a;a+=2;cout bc);coutclassA inta;public:/*1*intgeta()returna; ;classA1:publicA intb;public:/*2*intgetb()returnb; ;classA2:publicA1 intc;public:/*3*voidshow() /*4* ;voidmain() A2a(2,6,9);cout#include class Student public:Student(char *pName
7、=“No name“) cout# include class marriedprivate:int number; char *name; public:static int glob;void set_mes (char *a); ;void married : set_mes (char *a)name = new charstrlen(a) + 1 ;strcpy (name, a) ;number=+glob; cout str ;personi.set_mes ( str ) ; couttemplate class ABC private:T array I ;public:vo
8、id set (int x) int i;for (i=0; i abc1;abc1.set(0); abc1.get(); ABC abc2;abc2.set(10); abc2.get(); 程序运行结果:5. #include class Student public: Student() coutclass Myclass private:int x;int y;public:Myclass(int a,int b) x=a;y=b;void print();void myfunc();void Myclass:print() coutclass A private:int a;pub
9、lic:A(int i=0)a=i;void print();void A:print () cout/ 定义类模板 ABCtemplate class ABC private:T array I ; / 定义数组 arraypublic:void set (int x) / 定义成员函数 set int i;for (i=0; i abc1;abc1.set(0); /调用对象 abc1.setabc1.get(); /调用对象 abc1.get/由模板 ABC 生成对象 abc2ABC abc2;abc2.set(10); /调用对象 abc2.setabc2.get(); /调用对象 a
10、bc2.get2. 类 Build_1 是一个关于楼房数据的类。它的数据成员有 posi_x、posi_y和 area,分别是楼房位置的经、纬度和建筑面积。它的函数成员只有 set1,用于设置数据成员 posi_x、posi_y 和 area 的值。让 Build_1 作为基类,再增加数据成员 high、函数成员 set2 和 disp 来定义派生类 Build_2。#include class Build_1 /定义基类 protected:int posi_x; / 有三个保护型的数据成员int posi_y;int area;public:void set1(int x, int y,
11、int a) posi_x=x; posi_y=y; area=a; ;/定义派生类 Build_2class Build_2 : public Build_1 int height;public:void set2(int h) height=h;void disp() cout“n 经度:“posi_xendl;cout“ 纬度:“posi_yendl;cout“ 高度:“heightendl;cout“ 面积:“areaendlendl; ;void main() /用 Build_2 生成对象 objBuild_2 obj;obj.set1(100,200,300);obj.set2(400);obj.disp();