面向对象程序设计方法PPT课件
合集下载
面向对象程序设计PPT课件 PPT资料共63页

Stringed object vptr
Percussion object vptr
&Wind::play() & Stringed::play() & Percussion::play()
06.11.2019
第5章多态与抽象类
37
当通过对象调用虚函数时,是通过 vptr找到虚函数表,再找出虚函数的 真正地址。
06.11.2019
第5章多态与抽象类
28
【思考题5-4】将例5-5中用对象调用
虚函数,其结果如何?
【注意】只有通过对象指针或对象引 用来调用虚函数,才能实现动态联编 。如果采用对象来调用虚函数,则采 用的是静态联编方式。
06.11.2019
第5章多态与抽象类
29
【例5-6】将例5-4基类的成员函数 print()设为虚函数,采用对象引用调 用虚函数,进而实现动态联编。
06.11.2019
第5章多态与抽象类
32
小结
(1)如果你期望在派生类中重新定义一 个成员函数,那么你就应该在基类中 把该函数设为virtual。
(2)以单一指令调用不同函数,这种性 质就是"多态"。
(3)虚函数是C++语言的多态性质和动 态绑定的关键。
(4)虚函数派生下去仍是虚函数,而且
可以省略virtual关键词。 06.11.2019
25
该程序的运行结果为:
A student A graduate student A student A student A graduate student
06.11.2019
第5章多态与抽象类
26
【思考题5-5】如果将例5-5中Student类改 为:
Percussion object vptr
&Wind::play() & Stringed::play() & Percussion::play()
06.11.2019
第5章多态与抽象类
37
当通过对象调用虚函数时,是通过 vptr找到虚函数表,再找出虚函数的 真正地址。
06.11.2019
第5章多态与抽象类
28
【思考题5-4】将例5-5中用对象调用
虚函数,其结果如何?
【注意】只有通过对象指针或对象引 用来调用虚函数,才能实现动态联编 。如果采用对象来调用虚函数,则采 用的是静态联编方式。
06.11.2019
第5章多态与抽象类
29
【例5-6】将例5-4基类的成员函数 print()设为虚函数,采用对象引用调 用虚函数,进而实现动态联编。
06.11.2019
第5章多态与抽象类
32
小结
(1)如果你期望在派生类中重新定义一 个成员函数,那么你就应该在基类中 把该函数设为virtual。
(2)以单一指令调用不同函数,这种性 质就是"多态"。
(3)虚函数是C++语言的多态性质和动 态绑定的关键。
(4)虚函数派生下去仍是虚函数,而且
可以省略virtual关键词。 06.11.2019
25
该程序的运行结果为:
A student A graduate student A student A student A graduate student
06.11.2019
第5章多态与抽象类
26
【思考题5-5】如果将例5-5中Student类改 为:
C#面向对象程序设计-正式版PPT课件

• class关键字前面是访问级别。在C#中,类的访问 级别由类的修饰符进行限定,类的修饰符如表5-1 所示。在上例中,如果类的修饰符为public,这表 示该类可以被任何其他类访问。类的名称位于 class关键字的后面。
-
14
2.2 类的声明
• 以上的类修饰符可以两个或多个组合起来使用,但需要注意下面几点: (1) 在一个类声明中,同一类修饰符不能多次出现,否则会出错。 (2) new类修饰符仅允许在嵌套类中表示类声明时使用,表明类中隐藏了
//香蕉类中其他的属性和方法 }
-
6
1.2 面向对象语言的特点
(2) 封装
• 类是属性和方法的集合,为了实现某项功能而定 义类后,开发人员并不需要了解类体内每行代码 的具体涵义,只需通过对象来调用类内某个属性 或方法即可实现某项功能,这就是类的封装。
• 封装提供了外界与对象进行交互的控制机制,设
计和实施者可以公开外界需要直接操作的属性和
• 例如:某个对象,其基类为“笔”,在调用它的“写”
方法时,程序会自动判断出它的具体类型,如果是毛
笔,则调用毛笔类对应的“写”方法,如果是铅笔,
则调用铅笔类对应的“写”方法。
-
9
2 定义类
• 在C#中,“类”是一种数据结构,它可以包含数据成员 (常量和字段)、函数成员(方法、属性、事件、索引器、
运算符、构造函数、析构函数)。
由基类中继承而来的、与基类中同名的成员。
(3) 在使用public、protected、internal和private这些类修饰符时,要注意这些类 修饰符不仅表示所定义类的访问特性,而且还表明类中成员声明中的访问特 性,并且它们的可用性也会对派生类造成影响。
(4) 抽象类修饰符abstract和密封类修饰符sealed都是受限类修饰符。
-
14
2.2 类的声明
• 以上的类修饰符可以两个或多个组合起来使用,但需要注意下面几点: (1) 在一个类声明中,同一类修饰符不能多次出现,否则会出错。 (2) new类修饰符仅允许在嵌套类中表示类声明时使用,表明类中隐藏了
//香蕉类中其他的属性和方法 }
-
6
1.2 面向对象语言的特点
(2) 封装
• 类是属性和方法的集合,为了实现某项功能而定 义类后,开发人员并不需要了解类体内每行代码 的具体涵义,只需通过对象来调用类内某个属性 或方法即可实现某项功能,这就是类的封装。
• 封装提供了外界与对象进行交互的控制机制,设
计和实施者可以公开外界需要直接操作的属性和
• 例如:某个对象,其基类为“笔”,在调用它的“写”
方法时,程序会自动判断出它的具体类型,如果是毛
笔,则调用毛笔类对应的“写”方法,如果是铅笔,
则调用铅笔类对应的“写”方法。
-
9
2 定义类
• 在C#中,“类”是一种数据结构,它可以包含数据成员 (常量和字段)、函数成员(方法、属性、事件、索引器、
运算符、构造函数、析构函数)。
由基类中继承而来的、与基类中同名的成员。
(3) 在使用public、protected、internal和private这些类修饰符时,要注意这些类 修饰符不仅表示所定义类的访问特性,而且还表明类中成员声明中的访问特 性,并且它们的可用性也会对派生类造成影响。
(4) 抽象类修饰符abstract和密封类修饰符sealed都是受限类修饰符。
面向对象程序设计25页PPT

GStudent s2;
s1.print();
s2.print();
s2.Student::print();
ps=&s1; ps-> print(); ps=&s2; ps-> print(); }
A student A graduate student A student A student A student
另外,为了便于对教师和学生信息进行统一 处理以提高效率,还可以将学校的所有人员抽 象为一个Person类,将 student和teacher类作 为其派生类。因此,可画出系统的对象模型如 下:
Per son
Student
teacher
person类
定义 name sex address
数据类型 char数组 char数组 char数组
• 析构函数可以是虚函数,且往往被定义成虚函数。 因为实施多态时是通过将基类的指针指向派生类 的对象来完成的,如果要删除该指针所指的派生 类对象时就应该调用该指针所指向的派生类的析 构函数,然后派生类的析构函数又调用基类的析 构函数,这样整个派生类的对象才能被完全释放。
5.4 抽象类
有时在声明一个基类时无法为虚函数定义其具 体实现,这时可以将其声明为一个纯虚函数。 包含纯虚函数的抽象类。
运行时多态:在类的继承层次结构中,不同 层次的类中可能具有同名但实现不同的函数, 需要在运行阶段才能根据对象所属的层次来 确定调用哪个类中的同名函数。
5.2 联编
多态性的实现过程中,把一个消息函数(如 student1.display())与一个对象的具体函数 体相联系的过程叫做联编(binding),即确 定调用哪个对象的哪个同名函数的过程,又称 绑定。
面向对象程序设计(共13张PPT)

9.2.2 对象的使用
对象的使用主要体现在对其成员的引用上,对 象只能访问公有成员,一般格式为:
<对象名> . <公有成员数据名>
<对象名> . <公有成员函数名>(<参数表>)
prev
next
back
第5页,共13页。
9.2 类的使用
9.2.2 对象的使用
成员选择运算符 这里的符号“.”称为 对象数组的元素通过缺省构造函数而得到初始化。
4. 一个类的对象可作为另一个类的成员,
prev
称为对象成员。
next
back
第7页,共13页。
9.2 类的使用
9.2.3 对象数组和对象指针
定义一维对象数组的一般格式为:
《存储类型》<类名> <对象数组名>[<常量表达式
>];
对象数组中的每个元素可以象一般的对 象使用。
注意,在说明对象数组时,不能对它进 行初始化。对象数组的元素通过缺省构
第12页,共13页。
9.2 类的使用
9.2.5 类实现数据的封装
对象的封装性是指将对象的属性(成员数据)和 作用于这些属性上的操作(成员函数)封装在一 起,对象的使用者只能通过提供给它的接口
(公有成员函数)使用这个对象。
类通过对其成员设计不同的访问权限实现数据的
封装。公有成员是类的外部表现(在类外可以对 其进行访问和修改),而私有和保护成员则被 隐藏了。
prev
在定义类时,通常将该类的所有属性(成员数
据)和只供内部调用的操作(成员函数)定义为私
next
有成员或保护成员。
例9.5
back
对象的使用主要体现在对其成员的引用上,对 象只能访问公有成员,一般格式为:
<对象名> . <公有成员数据名>
<对象名> . <公有成员函数名>(<参数表>)
prev
next
back
第5页,共13页。
9.2 类的使用
9.2.2 对象的使用
成员选择运算符 这里的符号“.”称为 对象数组的元素通过缺省构造函数而得到初始化。
4. 一个类的对象可作为另一个类的成员,
prev
称为对象成员。
next
back
第7页,共13页。
9.2 类的使用
9.2.3 对象数组和对象指针
定义一维对象数组的一般格式为:
《存储类型》<类名> <对象数组名>[<常量表达式
>];
对象数组中的每个元素可以象一般的对 象使用。
注意,在说明对象数组时,不能对它进 行初始化。对象数组的元素通过缺省构
第12页,共13页。
9.2 类的使用
9.2.5 类实现数据的封装
对象的封装性是指将对象的属性(成员数据)和 作用于这些属性上的操作(成员函数)封装在一 起,对象的使用者只能通过提供给它的接口
(公有成员函数)使用这个对象。
类通过对其成员设计不同的访问权限实现数据的
封装。公有成员是类的外部表现(在类外可以对 其进行访问和修改),而私有和保护成员则被 隐藏了。
prev
在定义类时,通常将该类的所有属性(成员数
据)和只供内部调用的操作(成员函数)定义为私
next
有成员或保护成员。
例9.5
back
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
面向对象程序设计
前言 第1章 C++语言概述 第2章 数据类型和表达式 第3章 预处理和语句 第4章 函数和作用域 第5章 类和对象(一) 第6章 类和对象(二) 第7章 继承性和派生类 第8章 多态性和虚函数 第9章 C++的I/O流库
2
地位与作用
是计算机科学与技术专业本科生的一门必 修课程
C++程序设计教程.钱能编著.清华大学出版 社.1999
12
第1章 C++语言概述
基本要求 了解:面向对象程序设计的基本思想及 基本概念;面向对象语言的分类和c++中 支持面向对象的特点;面向对象的软件 开发环境;visual c++开发工作台的主要 功能。
13
第1章 C++语言概述
1.1 C++的起源及特点 1.2 面向对象的方法 1.3 面向对象的程序设计语言C++ 1.4 C++程序的编辑、编译和运行 1.5 C++的词法及词法规则 1.6 C++程序的结构
5
面向过程的程序设计(以C语言为例)
1、自上而下(top-down)的设计方式:是一个 自顶向下,逐步求精的过程; 2、以main函数概括出整个应用程序需要做的 事情,而main函数由对一系列的子函数的调 用组成;
main中的每一个子函数都可以被精炼成更 小的函数。重复这个过程,即可完成一个过 程式的设计; 3、特征是以函数为中心,以函数作为划分程 序的基本单位,数据往往处于从属地位。
15
1.1.1 面向对象的由来和发展(续)
20世纪60年代中期,Simula 67语言 面向对象语言的鼻祖,提出了对象、类的概
念,并支持类的继承。
20世纪70年代中期,Ada语言 支持数据抽象类型的最重要的语言之一,但
不完全支持继承。
20世纪70年代中期,Smalltalk语言 最有影响的面向对象语言之一,丰富了面向
9
2.面向对象程序设计的基本概念
面向对象程序设计中的概念主要包括:对 象、类、数据抽象、继承、动态绑定、 数据封装、多态性、消息传递。通过这 些概念面向对象的思想得到了具体的体 现。
10
3.面向对象语言
一个语言要称为面向对象语言必须支持几个主要面向对 象的概念。根据支持程度的不同,通常所说的面向对 象语言可以分成两类:基于对象的语言,面向对象的 语言。 基于对象的语言仅支持类和对象, 如Ada、Alphard、 CLU、Euclid、MБайду номын сангаасdula等,它们不支持继承、多态。
而面向对象的语言支持的概念包括:类与对象、继 承、多态。例如Smalltalk、Java。
另外一些则是对现有的语言进行改造,增加面向对象 的特征演化而来的。如C++,由Ada发展而来的Ada 95 等,这些语言保留着对原有语言的兼容,并不是纯粹 的面向对象语言,。
11
教材及参考书目
C++语言基础教程(第二版).吕凤翥著.清华 大学出版社.2007 C++语言及其程序设计教程(修订版).张国 峰编著.电子工业出版社.1997 C++语言程序设计.郑莉等编著.清华大学出 版社.1999
对象的概念。
20世纪80年代中期后出现C++等多种面向对象16语言
52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96
ALGOL60
Ada
ALGOL68 CPL BCPL B
Pascal
C
Modula-2
Simula 67
6
过程式设计的优缺点:
优点:易于掌握与理解,符合人们的思维习惯; 缺点: 1、不能适应问题比较复杂,或者需求经常变化的情
况; 2、数据与操作分离开,对数据与操作的修改变得很
困难; 3、程序架构的依赖关系不合理:main函数依赖于子
函数,子函数又依赖于更小的子函数;
程序的核心逻辑依赖于外延的细节,一个细节上 的小改动,会引起一系列的变动。
FORTRAN
COBOL LISP
BASIC PL/1
C++ Smalltalk 80
Java
ANSI-BASIC QBASIC VB
FORTRAN77
FORTRAN90
PROLOG
17
1.1.2 C++的起源和特点
一、C++的起源 在C语言基础上为支持面向对象的程序设计研 制的一个通用目的的程序设计语言;
面向对象软件开发集抽象性、封装性、继承 性和多态性于一体,可以帮助人们开发出模 块化、数据抽象程度高的,体现信息隐蔽、 可复用、易修改、易扩充等特性的程序
3
内容简介
面向对象的基本思想
C++语言的基本概念、基本语法和编程方法 C++语言的面向对象特征
类与对象 继承与派生 多态性与虚函数
4
学习方法
多练习,掌握基本概念 多读程序,学习编程方法与技巧 多上机实践,加强动手能力 多剖析范例,积累编程经验
14
1.1.1 面向对象的由来和发展
机器语言(二进制码)
汇编语言
20世纪50年代中期,FORTRAN语言
在计算机语言发展史上具有划时代的意义, 引入了许多程序设计概念。如变量、数组、循环、 分支等。
20世纪50年代中期,Algol语言
提出块(Begin…End)思想,对数据进行保护,
是一种初级封装。
《路德维希·费尔巴哈和德国古典文学的终结》 恩格斯
7
什么是面向对象程序设计 ?
面向对象程序设计(Object-oriented programming,OOP),指一种程序设计 范型,同时也是一种程序开发的方法论。 它将对象作为程序的基本单元,将程序 和数据封装其中,以提高软件的重用性、 灵活性和扩展性。
8
面向对象程序设计 1.历史回顾
1967年挪威计算中心的Kisten Nygaard和 Ole Johan Dahl开发了Simula67语言,它 提供了比子程序更高一级的抽象和封装, 引入了数据抽象和类的概念,它被认为 是第一个面向对象语言。
由AT&T贝尔实验室Bjarne Stroustrup博士开发;
二、C++的特点
与C兼容,既保持了C的简洁、高效和接近汇 编的特点,又比C更安全,结构化程度更高;
既支持面向过程的程序设计,又支持面向对象
的程序设计;
注意其两面性
18
1.2 面向对象的方法
必须先研究事物,而后才能研究过程。必须 先知道一个事物是什么,而后才能觉察这个事物 中所发生的变化。
面向对象程序设计
前言 第1章 C++语言概述 第2章 数据类型和表达式 第3章 预处理和语句 第4章 函数和作用域 第5章 类和对象(一) 第6章 类和对象(二) 第7章 继承性和派生类 第8章 多态性和虚函数 第9章 C++的I/O流库
2
地位与作用
是计算机科学与技术专业本科生的一门必 修课程
C++程序设计教程.钱能编著.清华大学出版 社.1999
12
第1章 C++语言概述
基本要求 了解:面向对象程序设计的基本思想及 基本概念;面向对象语言的分类和c++中 支持面向对象的特点;面向对象的软件 开发环境;visual c++开发工作台的主要 功能。
13
第1章 C++语言概述
1.1 C++的起源及特点 1.2 面向对象的方法 1.3 面向对象的程序设计语言C++ 1.4 C++程序的编辑、编译和运行 1.5 C++的词法及词法规则 1.6 C++程序的结构
5
面向过程的程序设计(以C语言为例)
1、自上而下(top-down)的设计方式:是一个 自顶向下,逐步求精的过程; 2、以main函数概括出整个应用程序需要做的 事情,而main函数由对一系列的子函数的调 用组成;
main中的每一个子函数都可以被精炼成更 小的函数。重复这个过程,即可完成一个过 程式的设计; 3、特征是以函数为中心,以函数作为划分程 序的基本单位,数据往往处于从属地位。
15
1.1.1 面向对象的由来和发展(续)
20世纪60年代中期,Simula 67语言 面向对象语言的鼻祖,提出了对象、类的概
念,并支持类的继承。
20世纪70年代中期,Ada语言 支持数据抽象类型的最重要的语言之一,但
不完全支持继承。
20世纪70年代中期,Smalltalk语言 最有影响的面向对象语言之一,丰富了面向
9
2.面向对象程序设计的基本概念
面向对象程序设计中的概念主要包括:对 象、类、数据抽象、继承、动态绑定、 数据封装、多态性、消息传递。通过这 些概念面向对象的思想得到了具体的体 现。
10
3.面向对象语言
一个语言要称为面向对象语言必须支持几个主要面向对 象的概念。根据支持程度的不同,通常所说的面向对 象语言可以分成两类:基于对象的语言,面向对象的 语言。 基于对象的语言仅支持类和对象, 如Ada、Alphard、 CLU、Euclid、MБайду номын сангаасdula等,它们不支持继承、多态。
而面向对象的语言支持的概念包括:类与对象、继 承、多态。例如Smalltalk、Java。
另外一些则是对现有的语言进行改造,增加面向对象 的特征演化而来的。如C++,由Ada发展而来的Ada 95 等,这些语言保留着对原有语言的兼容,并不是纯粹 的面向对象语言,。
11
教材及参考书目
C++语言基础教程(第二版).吕凤翥著.清华 大学出版社.2007 C++语言及其程序设计教程(修订版).张国 峰编著.电子工业出版社.1997 C++语言程序设计.郑莉等编著.清华大学出 版社.1999
对象的概念。
20世纪80年代中期后出现C++等多种面向对象16语言
52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96
ALGOL60
Ada
ALGOL68 CPL BCPL B
Pascal
C
Modula-2
Simula 67
6
过程式设计的优缺点:
优点:易于掌握与理解,符合人们的思维习惯; 缺点: 1、不能适应问题比较复杂,或者需求经常变化的情
况; 2、数据与操作分离开,对数据与操作的修改变得很
困难; 3、程序架构的依赖关系不合理:main函数依赖于子
函数,子函数又依赖于更小的子函数;
程序的核心逻辑依赖于外延的细节,一个细节上 的小改动,会引起一系列的变动。
FORTRAN
COBOL LISP
BASIC PL/1
C++ Smalltalk 80
Java
ANSI-BASIC QBASIC VB
FORTRAN77
FORTRAN90
PROLOG
17
1.1.2 C++的起源和特点
一、C++的起源 在C语言基础上为支持面向对象的程序设计研 制的一个通用目的的程序设计语言;
面向对象软件开发集抽象性、封装性、继承 性和多态性于一体,可以帮助人们开发出模 块化、数据抽象程度高的,体现信息隐蔽、 可复用、易修改、易扩充等特性的程序
3
内容简介
面向对象的基本思想
C++语言的基本概念、基本语法和编程方法 C++语言的面向对象特征
类与对象 继承与派生 多态性与虚函数
4
学习方法
多练习,掌握基本概念 多读程序,学习编程方法与技巧 多上机实践,加强动手能力 多剖析范例,积累编程经验
14
1.1.1 面向对象的由来和发展
机器语言(二进制码)
汇编语言
20世纪50年代中期,FORTRAN语言
在计算机语言发展史上具有划时代的意义, 引入了许多程序设计概念。如变量、数组、循环、 分支等。
20世纪50年代中期,Algol语言
提出块(Begin…End)思想,对数据进行保护,
是一种初级封装。
《路德维希·费尔巴哈和德国古典文学的终结》 恩格斯
7
什么是面向对象程序设计 ?
面向对象程序设计(Object-oriented programming,OOP),指一种程序设计 范型,同时也是一种程序开发的方法论。 它将对象作为程序的基本单元,将程序 和数据封装其中,以提高软件的重用性、 灵活性和扩展性。
8
面向对象程序设计 1.历史回顾
1967年挪威计算中心的Kisten Nygaard和 Ole Johan Dahl开发了Simula67语言,它 提供了比子程序更高一级的抽象和封装, 引入了数据抽象和类的概念,它被认为 是第一个面向对象语言。
由AT&T贝尔实验室Bjarne Stroustrup博士开发;
二、C++的特点
与C兼容,既保持了C的简洁、高效和接近汇 编的特点,又比C更安全,结构化程度更高;
既支持面向过程的程序设计,又支持面向对象
的程序设计;
注意其两面性
18
1.2 面向对象的方法
必须先研究事物,而后才能研究过程。必须 先知道一个事物是什么,而后才能觉察这个事物 中所发生的变化。