面向对象程序设计复习资料
- 格式:docx
- 大小:29.63 KB
- 文档页数:14
面向对象程序设计复习资料
第2章 面向对象思维建立
面向对象程序设计的特征:
①模块化;②抽象化;③封装;④可组合;⑤继承;⑥软件持续使用时间更长。
面向对象思维分为两步:
一是需求分析,识别出有哪些对象,它们分别做什么事(who&&what );二是如何利用 对象协作完成一件完整的事情(howb•类与对象的概念和关系:
1 )类是面向对象程序设计方法的核心,利用类可以实现对数据的封装和隐蔽。
在面向对象程序设计中,程序模块是由类构成。类是对逻辑相关的函数与数据的封装, 它是对问题的抽象描述。
C++的语法提供了对自定义类型的支持,这就是类。
正如基本数据类型中隐含的数据和操作,因此在定义一个类时也要说明数据和操作。
2)类实际上是一种抽象机制,它描述了一类为问题的属性和行为,即类描述了一类对象的 数据存储和操作特征。
每一个怪物都有一些共同的静态特征,这些共同的特征抽象到类中统称为该类的属性, 属性通过声明普通变量来实现。
每一个怪物都有一些共同的动态行为,这些共同的行为抽象到类中统称为该类的操作, 操作通过声明普通变量来实现。 还能调用对象中的函数(构造函数和析构函数除外)
#pragma once
#include ,'Craftsmanship.h'^
#include "Monster.h"
class Hero
private: #pragma once :能够保证当前的头文件只被编译一次,防止多 次编译。
#include '*Craftsmanship.hn :表示引入头文件
class Hero :该语句是类的前置声明,防止出现死循环引用现 象。
private:
表示私有的,即变量iAttack和函数settlement(int level)RBB 由英雄类中的函数访问,其他位置无法访问。
・对象间的协作实现
如果函数在类外实现,那么必须在函数名前加上类名,否那么不能实现
“::"是作用域限定符,用来声明函数属于哪一类;
类必须先在类中做原型声明,然后才能在类外实现;
system(”psudr”):等待用户按键然后返回,按任意键继续;
system(”cls”):清屏操作关键字new :①在堆上获得一块内存空间、②调用构造函数、③返回正确的指针
栈(堆栈)是限定仅在表尾进行插入和删除操作的线性表。
单独存放数据的那块内存称为“堆”,存储指针那块内存称为“栈”
User *Lucy = new User():声明一个指针对象Lucy ,在名称堆区保存Lucy这个对象的所有 信息,在栈中保存Lucy的堆地址。
delete对象名;|销毁之前引用的对象第6章 深入学习面对对象函数 成员函数:属于一个类的函数;用于完成对象的初始化类函数:类的成员函数,属于一个类的成员,出现在类体中。
・函数重载:又称函数名重载或函数重名,是指同一个函数名可以有多种函数实现,或者说 实现不同功能细节的函数可以具有相同的函数名。
实现函数重载的条件为:参数列表不同。
函数重载 void showlnfo();
void showlnfo(string name); void showlnfo(string name); void
showlnfo(int num);
①参数个数不同 ②参数类型不同
・构造函数:一种特殊的成员函数,是由系统在创立对象时自动调用的,且构造函数不允许
被手动调用。
特点:没有返回值,与类同名;
优势:减轻代码量负担,使得对象初始化功能变得更简单便捷。
由用户自定义,可根据初始值的要求设计函数体。
声明格式:”构造函数名(类型1形参1,类型2形参2,…){ }"
对象定义格式:“类名 对象名(实参1,实参2.・.);
有参数的构造函数称为有参构造函数,没有参数的构造函数称为默认构造函数;如果类 中没有编写构造函数,那么只能创立无参数的对象,系统会自动默认并添加该类的无参构造函 数。
•封装:即隐藏细节,只暴露出最终实现的公共接口。
编写代码时,将类的声明与成员函数实现局部进行别离
void User: :setName(string _name){this -> _name = _name; }〃语句 1
this指针只能在类的成员里使用;由this指向的_name表示User类中的属性,而等号另一端那么是形参_name。赋值语句从右向 左赋值,因此该句话表示形参给成员属性值。
构造函数的重载:构造函数具有相同的名字(即类名),而参数的个数或参数的类型不相同•析构函数:完成对象的销毁;不能用手动调用,是当对象的生命周期结束时,由程序自动 执行。
关于析构函数注意点:
完成一些清理工作,但不会删除对象本身;
没有返回值,没有参数;
不能被重载,因此可以有多个构造函数,但只有一个析构函数;
功能可以由用户自定义。
第7章继承
继承就是将公共的东西提取出来,封装成应该类,称为父类或基类,在此基础上编写的其他属性和方法称为子类或派生类。〈汽车是父类,由汽车派生出的有小汽车,卡车等属于 子类。)
继承是对自然界中继承关系的一个抽象;继承可分为单继承和多继承两类。
派生机制的好处是在于代码的重用性和可扩充性。通过继承可以充分地利用已有的解决 方案。
派生新类的过程包括:①继承已有类的成员、②重写已有类的成员和③扩展新成员。
在右边的层次结构中,由上到下是一个具体化、特殊化的过程;由e7n角色
上到下,是一个抽象化的过程。上下层的关系可以看作基类与派生类的I英雄I国直关系。
表示继承关系定义格式:“子类:父类”第8章多态
同一个消息被不同类型的对象接收后产生不同的行为称为多态性,特点:一个接口,多 个实现。 编译时为静态多态,运行时为动态多态。函数重载是静态多态的表现形式之一。
在基类中把共同的功能声明为多个虚函数的接口。各子类重写虚函数,以完成具体的功 能。
C++定义虚函数时在函数声明前添加“virtual" ;格式/virtual函数类型 函数名(形参表);”
使用虚函数必须在类中实现;纯虚函数(=0 )无需在当前类中实现。
当C++类中包含纯虚函数,这个类就成为了抽象类。抽象类规定:继承了抽象的子类必 须实现抽象类中定义的抽象方法,且抽象类不能被实例化。
类型兼容规那么是指在需要的基类对象的任何地方都可以使用公有派生类的对象来替代。
在替代完成后,派生类对象就可以作为基类的对象使用,但是只能使用从基类继承的成员。
纯虚数定义格式:“virtual函数类型函数名(形参表)=0;”怪物类伪类图:
伪类图 含义 UML图
怪物 类名
—
r
怪物
1
一 边界开始
—
名称;
■
名称;
属性
级别;」 级别;
攻击力; 操作
攻击力;
生命值HP ;
生命值HP ;
一
初始化怪物;-
初始化怪物;
一 边界结束
怪物进行攻击; 怪物进行攻击;
判断怪物是否存活;
判断怪物是否存活;
)
第3章面向对象思维建模
UML :统一建模语言或标准建模语言1 )类图:常见的UML图,显示了建模的静态结构,特别是模型中存在的类、类的内部结 构以及他们与其他类的关系等。
类与类之间的常见关系:
①依赖关系:依赖关系的偶然性和临时性——人依赖船
②聚合关系:整体与局部之间是可别离的
③继承关系:含义:儿子类继承父亲类,不仅继承所有属性和行为,还自己拓展 2)时序图:也称为序列图或循序图或顺序图,是一种UML交互图,它通过描述对象之间 发送消息的时间顺序显示多个对象之间的动态协作。
类图表示“不因时间而变化的局部(静态关系)”; 时序图表示“随时间而变化的局部(动态行为)”时序图的元素组成和绘制流程:
对象:类的实例;三种状态——激活、运行、销毁
生命线:对象在一段时间内的存在
激活:对象操作的执行
消息:对象之间的通信机制(五类:递归调用、普通操作、返回消息、导步调用) 3)用例图:指由参与者、用例以及他们之间的关系构成的用于描述系统功能的视图。
第4章 程序设计语言C++初识
C语言:是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。
C++ :是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象 数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序 设计。
#include include预编译命令,将有关的“头文件”包括到用户源
文件中。
iostream是一个文件库,其表示输入输出流
using namespace std\ std是一种命名空间,属于iostream库,在不同的命名
空间下的函数可以重名
int main() 定义主函数,必须有且仅有一个main函数作为程序的
入口。
{ cout«nHello
World! n«^/; <
return 0; } 函数结束的时候要有返回值。
include ”文件名”.先寻找工程当前目录,找不到再寻找安装目录。适用于导入用户自定 义的、处在工程当前目录下的文件。
include(文件名〉-> 不寻找工程当前目录,直接寻找安装目录。适用于导入标准库(文件 名)中的文件。
程序注释:单行注释“//”和多行注释"/*多行内容*/”C++编译过程经历步骤:
1、用C++语言编写程序。
2、对源程序进行编译。包括错误(Error)和警告(Warning)
3、将目标文件连接起来。
4、执行程序。
5、分析运行结果。
变・:程序运行过程中其值可以改变。必须先定义后使用,区分大小写;
常■:程序运行过程中其值不能改变。分类:整型常量、实型常量、字符型常量、字符