第2章 面向对象程序设计基础
《C++程序设计》习题解答

《C++程序设计》习题解答第1章C++概述1.填空题(1)在面向对象程序设计中,对象是由___________、___________和___________封装在一起构成的实体。
(2)在面向对象程序设计中,类是具有________________和___________的对象的集合,它是对一类对象的抽象描述。
(3)面向对象程序设计最突出的特点就是___________、___________和___________。
(4)C++语言包含头文件的格式有两种,即_______________和__________________。
(5)C++源程序要经过________、_________、________和_________四个环节,才能在屏幕上显示结果。
(6)每个C++程序都从________函数开始执行。
(7)每个函数体都以________开始,以________结束。
(8)C++程序中的每条语句以________结束。
(9)C++程序的头文件和源程序的扩展名分别为__________和_________,目标程序的扩展名为__________,可执行程序的扩展名为__________。
(10)在C++程序中使用基本输入/输出语句需包含的头文件是________________,应放在程序的________________。
(11)在C++程序中注释语句有_______________和______________两种格式。
(12)C++程序的续行符为_________。
(13)如果从键盘输入语句给变量X,则输入函数的形式为_____________;如果再将变量X的值显示在屏幕上,其输出函数的形式为_____________。
(14)C++程序中的“endl”在输出语句中起___________作用。
参考答案:(1)对象名,一组属性数据,一组操作(2)相同属性数据,操作(3)封装性,继承性,多态性(4)#include<文件名.扩展名>,#include"文件名.扩展名"(5)编辑,编译,连接,运行(6)主函数(7){、}(8)分号;(9).h,.cpp,.obj,.exe(10)#include<iostream.h>,开始部分(11)/* */,//(12)\(13)cin>>X、cout<<X(14)换行并清空流2.选择题(1)面向对象程序设计把数据和()封装在一起。
程序设计基础

第二章程序设计基础2.1程序设计方法与风格程序设计是一门艺术,需要相应的理论、技术、方法和工具来支持。
就程序设计方法和技术的发展而言,主要经过了结构化程序设计和面向对象程序设计阶段。
除了好的程序设计方法和技术外,程序设计风格也是很重要的。
因为程序设计风格会深刻地影响软件的质量和可维护性,良好的程序设计风格可以使程序结构清晰合理,使程序代码便于维护,因此程序设计风格对保证程序的质量是很重要的。
一般来说,程序设计风格是指编写程序时所表现出的特点、习惯和逻辑思路。
程序是由人来编写的,为了测试和维护程序,往往还要阅读和跟踪程序,因此程序设计的风格总体而言应该强调简单和清晰,程序必须是可理解的。
可以认为,著名的“清晰第一,效率第二”的论点已成为当今主导程序设计风格。
要形成良好的程序设计风格,主要应注重和考虑下述一些因素。
1、源程序文档化源程序文档化应考虑如下几点:(1)符号名的命名:符号名的命名应具有一定实际意义,以便于对程序功能的理解。
(2)程序注释:正确的注释能够帮助读者理解程序。
注释一般包括序言性注释和功能性注释。
序言性注释通常位于每个程序的开头部分,它给出程序的整体说明,主要描述内容包括:程序标题、程序功能说明、主要算法、接口说明、程序位置、开发简历、程序设计者、复审者、复审日期、修改日期等。
功能性注释的位置一般嵌在源程序体之中,主要描述其后的语句或程序做什么。
(3)视觉组织:为使程序的结构一目了然,可以在程序中利用空格、空行、缩进等技巧使程序层次清晰。
2、数据说明的方法在编写程序时,需要注意数据说明的风格,以便使程序中的数据说明更易于理解和维护。
一般应注意以下几点:(1)数据说明的次序规范化。
鉴于程序理解、阅读和维护的需要,使数据说明次序固定,可以使数据的属性容易查找,也有利于测试、排错和维护。
(2)说明语句中变量安排有序化。
当一个说明语句说明多个变量时,变量按字母顺序排列为好。
(3)使用注释来说明复杂数据的结构。
公共基础知识2-程序设计方法

第三章 软件工程基础
基本要求:
掌握软件工程的基本方法,具有初步应用相关技 术进行软件开发的能力。
考试要求:
1、软件工程基本概念,软件生命周期概念,软件工具与 软件开发环境。 2、结构化分析方法,数据流图,数据字典,软件需求规 格说明书。 3、结构化设计方法,总体设计与详细设计。 4、软件测试的方法,白盒测试与黑盒测试,测试用例设 计,软件测试的实施,单元测试、集成测试和系统测 试。 5、程序的调试,静态调试与动态调试。
概要设计中有关的几个概念: 模块化:是指解决一个复杂问题时自顶向下逐层把 软件系统划分成若干模块的过程。 模块独立性:每个模块只完成系统要求的独立的子 功能,并且与其它模块的联系最少且接口简单。 用两个标准来度量模块的独立性——耦合性和 内聚性。 • 耦合性:模块之间联系越紧密,其耦合性就越强, 模块的独立性就越差。 • 内聚性:一个模块内各元素(语句、程序段)联 系越紧密,它的内聚性就越高。 尽量做到高内聚、低耦合,才能提高软件质量。
2.测试方法 软件测试方法一般分为两大类:动态测试方法 与静态测试方法。而动态测试方法又根据测试用例 的设计方法不同,分为黑盒测试盒白盒测试两类。 静态测试:是指被测试程序不在机器上运行,也就 是不执行该程序,只是对程序文本进行检查, 通过阅读盒讨论,分析和发现程序中的错误。 动态测试:是基于计算机的测试,是为了发现错误 而执行程序的过程,即根据软件开发各个阶段 的规格说明设计的测试用例,并利用这些测试 用例去运行程序,以发现程序错误的过程。
软件需求规格说明书 是需求分析阶段研制的主要成果。主要有3 个作用:(1)作为用户和软件开发人员之间的 合同;(2)作为开发人员进行设计和编程的根 据;(3)作为软件开发完成后验收的依据。 主要内容: 软件功能概述 数据描述 功能描述 附录
面向对象程序设计教案

面向对象程序设计教案第一章计算机与程序设计基本内容:1.把程序及其相关文档资料称为软件。
2.程序设计语言是人类用来向计算机传递信息的表示方法、约定和规则的集合。
3.传统的程序设计语言是过程性语言,使用这类语言编制程序的主要工作,是设计解题过程,因此称为面向过程程序设计。
4.用模块化、抽象、信息隐藏、局部化和模块化独立等原理及结构程序设计技术指导面向过程程序设计,能够提高软件开发效率,增加软件的可理解性和可维护性。
这些方法不仅适用于面向过程程序设计也适用于面向对象程序设计方法。
5.面向对象方法有四个要点,只有同时使用对象、类、继承和消息的方法,才是真正的面向对象方法。
学习面向对象程序设计,首先要学会面向对象的思维解题方法。
各种面向对象的程序设计语言,无非是实现面向对象解题方法的工具。
6.面向对象方法的主要优点是,接近人类习惯的思维方法、稳定性好、可重用性好和可维护性好。
是解决软件开发面临的难题的最有希望最有前途的方法之一。
1.1 计算机的基本结构1.2 程序设计语言一、机器语言(machine language):以0和1表示手工操作二、汇编语言(assembler language):例如mov ax,100add ax,bx等开始使用批处理(batch processing)三、高级语言(high-level language):如60年代的ALGOL四、结构化程序设计(structured programming)整个程序是一个模块层次(hierarchy of modules)每一模块内既有数据,又有代码,用于按一定算法对代码进行操作如FORTRAN,C等五、面向对象的程序设计(Object-Oriented Programming, OOP)1.3 面向过程程序设计三种基本结构:1、顺序结构。
2、选择结构。
3、循环结构:当型循环结构;直到型循环结构。
结构化程序设计方法:1、自顶而下;2、逐步细化;3、模块化设计;4、结构化编码。
计算机二级理论知识精华版

第一章数据结构与算法第一节算法一、算法的基本概念所谓算法是指解题方案的准确而完整的描述。
1、算法的基本特征:(1)可行性(2)确定性(3)有穷性(4)拥有足够的情报2、算法的基本要素(1)算法中对数据的运算和操作算术运算,逻辑运算,关系运算,数据传输(2)算法的控制结构:算法中各操作之间的执行顺序称为算法的控制结构。
一个算法可以用顺序、选择、循环三种基本控制结构组合而成。
2、算法设计的基本方法(1)列举法(2)归纳法(3)递推(4)递归(5)减半递推技术二、算法复杂度1、算法的时间复杂度:指执行算法所需要的计算工作量。
用算法在执行过程中所需基本运算的次数来衡量算法的工作量。
方法:平均性态,最坏情况复杂性2、算法的空间复杂度:指执行这个算法所需的内存空间。
第二节数据结构的基本概念一、什么是数据结构数据结构是指相互有关联的数据元素的集合。
如:(1)春、夏、秋、冬(2)父亲、儿子、女儿(1)数据元素有共同的特征(2)各个元素之间存在着某种关系(联系)。
用前后件关系来描述。
如:夏是秋的前件,秋是夏的后件。
父亲是儿子和女儿的前件儿子和女儿都是父亲的后件1、数据的逻辑结构数据结构是指带有结构的数据元素的集合。
一个数据结构应包含以下两方面的信息:(1)表示数据元素的信息(2)表示各数据元素之间的前后件关系,前后件关系是逻辑关系,与它们在计算机中的存储位置无关。
数据的逻辑结构反映数据元素之间的逻辑关系。
2、数据的存储结构数据的逻辑结构在计算机中的存放形式称为数据的存储结构,也称数据的物理结构。
采用不同的存储结构,数据处理的效率不同。
一般情况下,数据的逻辑结构和存储结构是不同的。
二、数据结构的图形表示每一个数据元素用中间标有元素值的方框表示,称为数据结点,简称结点。
用一条有向线段从前件结点指向后件结点。
父亲丨在数据结构中,没有前件的结点称为根结点,没有后件的结点称为终端结—午—点(也称为叶子结点)。
其他结点一儿子女儿般称为内部结点。
面向对象程序设计(谭浩强版)

一、面向过程与面向对象程序设计
面向过程程序设计 面向对象程序设计
P5 P6 P4 P3 P2 P1
O5 O4 O3 O2 O1
一、面向过程与面向对象程序设计
面向过程程序设计 面向对象程序设计
O5 O4 O3 O2 O1
二、抽象在面向对象中的作用
Ⅰ、抽象的概念 抽象代表着一个对象的本质特征,这个特征将 这个对象与所有其他种类的对象区别开来; 抽象是通过从特定的实例中抽取共同的性质以 形成一般化的概念的过程; 抽象具有层次;
在计算机语言发展史上具有划时代的意义, 引入了许多程序设计概念。如变量、数组、循环、 分支等。
20世纪50年代中期,Algol语言 提出块(Begin…End)思想,对数据进行保护, 是一种初级封装。
1.1 从C到C++
20世纪60年代中期,Simula 67语言 面向对象语言的鼻祖,提出了对象、类的概 念,并支持类的继承。 20世纪70年代中期,Ada语言
1.2 最简单的C++程序
例1.3:输入两个数x和y,求两数中的大者。
#include<iostream> using namespace std; 函数声明 int main() { int max(int x,int y); int a,b,c; cin>>a>>b; c=max(a,b);//函数调用 cout<<"max="<<c<<endl; return 0; } int max(int x,int y) {int z; if(x>y) z=x; else
注意其两面性
1.1先研究事物,而后才能研究过程。必须 先知道一个事物是什么,而后才能觉察这个事物 中所发生的变化。 《路德维希· 费尔巴哈和德国古典文学的终结》
2Java第二单元练习题-面向对象程序设计基础Word版

2面向对象程序设计基础2.1单项选择题1.下面关于类的继承性的描述中,错误的是()。
A.继承是在已有的基础上生成新类的一种方法B.Java语言要求一个子类只有一个父类C.父类中成员的访问权限在子类中将被改变D.子类继承父类的所有成员,但不包括私有的成员方法2.在成员方法的访问控制修饰符中,规定访问权限包含该类自身,同包的其他类和其他包的该类子类的修饰符是()。
A.默认B.protected C.private D.public3.在类的修饰符中,规定只能被同一包类所使用的修饰符是()。
A.public B.默认C.final D.abstract4.下列关于子类继承父类的成员描述中,错误的是()。
A.当子类中出现成员方法头与父类方法头相同的方法时,子类成员方法覆盖父类中的成员方法。
B.方法重载是编译时处理的,而方法覆盖是在运行时处理的。
C.子类中继承父类中的所有成员都可以访问。
D.子类中定义有与父类同名变量时,在子类继承父类的操作中,使用继承父类的变量;子类执行自己的操作中,使用自己定义的变量。
5.下列关于继承性的描述中,错误的是()。
A.一个类可以同时生成多个子类B.子类继承了父类中除私有的成员以外的其他成员C.Java支持单重继承和多重继承D.Java通过接口可使子类使用多个父类的成员6.下列关于抽象类的描述中,错误的是()。
A.抽象类是用修饰符abstract说明的 B.抽象类是不可以定义对象的C.抽象类是不可以有构造方法的D.抽象类通常要有它的子类7.下列关于构造方法的叙述中,错误的是()。
A.构造方法名与类名必须相同B.构造方法没有返回值,且不用void声明C.构造方法只能通过new自动调用D.构造方法不可以重载,但可以继承8.下面叙述中,错误的是()。
A.子类继承父类B.子类能替代父类C.父类包含子类D.父类不能替代子类9.下面关于接口的描述中,错误的是()。
A.一个类只允许继承一个接口B.定义接口使用的关键字是interfaceC.在继承接口的类中通常要给出接口中定义的抽象方法的具体实现D.接口实际上是由常量和抽象方法构成的特殊类10.欲构造ArrayList类的一个实例,此类继承了List接口,下列哪个方法是正确的?()A.ArrayList myList=new Object(); B.ArrayList myList=new List();C.List myList=new ArrayList(); D.List myList=new List();11.下列哪一个方法与方法public void add(int a){}为不合理的重载方法?()A.public void add(char a) B.public int add(int a)C.public void add(int a,int b) D.public void add(float a)12.MAX_LENGTH是int型public成员变量,变量值保持为常量100,其定义是()。
C++程序设计04737 第2章 面向对象的基本概念

void myDate::setDate(myDate oneD)
{year=oneD.year;month=oneD.month;day=oneD.day;return;}
myDate myDate::getDate()
{return *this;}
void myDate::setYear(int y)
例2-4单项选择题
下列关于类定义的叙述中,正确值 B.类中可以声明成员函数,并可以给出参数的默认值
C.类体不能为空,即必须定义成员变量及成员函数 D.类中仅能包含成员变量
答案:B
例2-5单项选择题
若Test类中的一个成员函数set的说明如下:void set (Test &a);
联函数。
如果成员函数定义在类体外,则类体内必须要有函数原型,类体外函数定义的前面必须用“类
名::”来限定,格式如下:
返回值类型 类名::成员函数名(参数列表)
{
成员函数的函数体
}
类名是成员函数所属类的名字,符号::是类作用域运算符,表明后面的成员函数是属于
类名标识的这个类的。返回值类型就是这个成员函数返回值的类型
第三节 类的初步知识
一、类的定义 面向对象方法中的类,是对具有相同属性和行为的同一类对象的抽象描述,其内部包
括属性(本类的成员变量)和行为(本类的成员函数)两个主要部分,即类以数据为 中心,把相关的一批函数组成为一体。 例2-2描述扑克牌的属性
扑克牌定义为Poker。每张牌由花色和点数描述,可以定义为类Poker的两个属性, suits和number。Poker类的操作,可以根据玩法确定。
获取函数。
类中的成员按功能划分,包括成员变量和成员函数;按访问权限划分,包括公有成员、私有成
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.2.1 类的定义
class 类名称 类与外部的接口 { public: 公有成员(外部接口) private: 只允许本类中的 成员访问 私有成员 函数访问(可省略) 说明符 protected: 保护成员 只能由本类及其派生类 }; 的成员函数访问
是必需的
9
例2.1:圆类的定义见教材24页
};
CCircle::CCircle(double r) { radius = r>0 ? r : 1; }
14
拷贝构造函数
拷贝构造函数是一种特殊的构造函数,其形参为本类对象 的引用。 class 类名{ public : 类名(形参);//构造函数 类名(类名 &对象名);//拷贝构造函数 …… }; 类名:: 类名(类名 &对象名)//拷贝构造函数的实现 { 函数体 }
12
2.2.2 构造函数
作用:对象的初始化
性质:
与类同名、无返回类型 在对象创建时由系统自动调用
允许重载、带缺省值
如果类中未声明,则系统自动生成一个缺省 形式的构造函数,形如:类名(){ }
13
构造函数举例--- CCircle类
class CCircle {
public:
CCircle() // 无参(缺省)构造函数 { radius = 1; } CCircle(double r); // 带参构造函数 …… private: double radius; 两个构造函数合成一个带缺省值的构造函数 CCircle(double r=1); // 构造函数原型 CCircle::CCircle(double r) // 构造函数定义 { radius = r>0 ? r : 1; }
7
2.2 类与对象的定义
类是C++的灵魂,如果不真正掌握类,就不能真 正掌握C++
C++中的类就是一种用户自己定义的数据类型, 和其它数据类型不同的是,组成这种类型的不仅 可以有数据,而且可以有对数据进行操作的函数。 为了封装的需要,一般将类的定义放在一个.h文 件中,而将类的成员函数的实现放在一个.cpp文 件中。
类是具有相同属性和行为的一组对象的集合, 它为属于该类的全部对象提供了统一的抽象描述, 其内部包括属性和行为两个主要部分。
对象之间的交互:发送消息
4
封装
封装的目的是隐藏对象的内部的实现细节。
通过封装,可以将对象的外部接口与内部的实 现细节分开。 目的是增强安全性和简化编程,使用者不必了 解具体的实现细节,而只需要通过外部接口,以 特定的访问权限,来使用类的成员。
2
2.1 面向对象的基本概念
观点:
自然界是由实体(对象)所组成。
程序设计方法:
使用面向对象的观点来描述、模仿并处理现实
问题。
ห้องสมุดไป่ตู้
要求:
高度概括、分类、和抽象。
程序=多个对象+消息
目的:
实现软件设计的产业化。
3
类和对象
对象是现实世界中一个实际存在的事物
对象的静态特征 对象的行为
同,但需要将它放在类的声明体中,一般为私有访问属 性。
类的成员函数定义:
在类中说明原型,类外给出函数体实现,函数名之前
必须加类名和作用域区分符限定
将成员函数定义为内联函数:
成员函数在类的内部定义,此时无须使用inline关
键字,成员函数自动为内联函数。 成员函数在类内声明,在类外定义。但在类外定义 时,要加关键字inline。类的成员函数允许声明为 11
//Circle.h文件,类CCircle的定义 const double PI = 3.14159; // 定义圆周率为符号常量 class CCircle // 定义类 { public: CCircle() //构造函数 { radius = 1; } virtual ~CCircle() { } // 析构函数 inline double Area()const; // 计算圆的面积 double Circumference() const; // 计算圆的周长 double GetRadius() const // 取得圆的半径 { return radius; } void SetRadius( double r) // 为半径设置新值 { radius = r>0 ? r : 1; } private: double radius; // 数据成员 }; inline double CCircle::Area() const // 计算圆的面积 { return PI * radius * radius; }
const成员函数
const成员函数:
不修改数据成员的值, 在程序中如果不小心修改了这个成员函数中的对象,
则编译器会产生一个语法错误信息。
const 成员函数的定义方法:
在函数的原型和定义中,在函数参数表和函数定义
的左花括号之间加入const关键字。
类的成员函数允许重载,允许带缺省参数值。
//Circle.cpp文件,类CCircle的成员函数的 实现 #include “Circle.h” double CCircle::Circumference() const // 计算圆的周长 { return 2 * PI * radius; }
10
说明:
类的数据成员(成员变量) :与一般的变量声明相
5
继承
继承是C++中支持层次分类的一种机 制,允许程序员在保持原有类特性的基 础上,对新类进行更具体的说明。
实现:声明派生类——2.3
6
多态性
多态:同一名称,不同的功能实现方式。
目的:标识统一,减少程序中标识符的个数;
接口统一,增加程序的灵活性
实现:——2.4
编译时的多态性:重载函数 运行时的多态性:虚函数
教学目标:
了解面向对象的基本概念 熟练掌握类、对象、派生类的定义和使用 掌握类的构造函数和析构函数的定义和特点 能够利用虚函数实现多态性 熟悉友元的特性
1
教学内容:
2.1 2.2 2.3 2.4 2.5 2.6 面向对象的基本概念 类和对象的定义 继承性和派生类 多态性 友元 模板