清华C--语言程序设计:第15章-多态性PPT课件

合集下载

C语言程序设计清华大学郑莉PPT课件

C语言程序设计清华大学郑莉PPT课件

向 • 是现实世界中一个实际存在的事物。
• 可以是有形的(比如一辆汽车),也可以是无形的(比如一项计划)。
对 • 是构成世界的一个独立单位,具有:
象 • 静态特征:可以用某种数据来描述
的 • 动态特征:对象所表现的行为或具有的功能


第13页/共702页
面向对象的基本概念

——对象

对 象
• 面向对象方法中的对象:


的 表
┌控制信息 │
示 信息┤






└ 浮点数 └数据信息
┌ 字符数据
息┤
第27页/共702页
┌ 指令 ┤ └ 控制字
┌ 定点数 ┌ 数值信息 ┤ │ └ 非数值信
└逻
计算机的数字系统
信 息 的
表 示
• 计算机采用的是二进制数字系统。 • 基本符号:0、1 • 进位原则:逢二进一 • 优点:
维护
面 将 软 件 交 付 使 用 后 , 工 作 并 没 有 完 结 , 还 要 根 据 软 件 的 运 行 情 况 和 用 户 的 需 求 , 不 断 改 进 系 统 。 向 使 用 面 向 对 象 的 方 法 开 发 的 软 件 , 其 程 序 与 问 题 域 是 一 致 的 , 因 此 , 在 维 护 阶 段 运 用 面 向 对 象 的 方 法
发生联系。
对 象 的 方 法
第17页/共702页
面向对象的基本概念
面 — — 继 承 • 继承对于软件复用有着重要意义,是面向对象技术能够提高软件开发效率的重要原因之一。 向 • 定义:特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。 对 • 例如:将轮船作为一个一般类,客轮便是一个特殊类。

(完整版)《C语言程序设计》教案(清华谭浩强)

(完整版)《C语言程序设计》教案(清华谭浩强)

第一章C语言及程序设计概述本章要求:了解C语言的特点、C语言与其它高级语言相比有什么异同;了解C程序在PC机上的建立、编译和运行过程;了解C语言程序设计思想的基本篇;重点:①C语言的主要特点;②C语言在PC机上的运行过程及上机操作过程;③常用算法的应用难点:无一、C语言概述C语言是目前国际上在各种计算机运行较为广泛流行的一种高级语言.主要表现为:C语言:适合于作为系统描述语言—-可用来写系统软件。

具有高级语言的特点,又有低级语言(汇编语言)的特点。

C语言:是AT&T贝尔实验室的Dennis Ritchie在1972年发明的。

C语言:是在B语言的基础上发展起来的.(ALGOL 60)C语言:最早开始是用于UNIX操作系统。

(C语言和UNIX是相辅相成的)DBASE 、Microsoft Exel 、 Microsoft Word、PC—DOS等,则是用C语言加上若干汇编子程序编写的。

1983年:——制定的新标准,称为(美国国家标准化协会)ANSI C1987年:—-Turbo C1.0 (Borland) 1988年:TC 1.5(图形和文本窗口)1989年:——Turbo C2。

0 (DOS操作系统、查错、Tiny模式生成com文件)1991年:—-Turbo C++(3.0) 支持windows 3.X说明:Turbo C语言可以在程序的任何地方嵌入汇编代码,提高速度,可以直接使用存储器和寄存器。

二.C语言的特点1.语言简洁、紧凑、使用方便、灵活C语言:——共有32个关键字,9种控制语句;程序书写自由,主要用小写字母表示;2.运算符丰富C语言的运算符包含的范围很广泛,共有34种运算符;即:把括号、赋值、强制类型转换都作为运算符处理3.有丰富的数据类型整型、实型、字符型、数据类型、指针类型、结构体类型、共用体(联合)类型等。

实现复杂的数据结构(链表、树、栈、图)的运算。

4.具有结构化的功能,用函数作为程序模块,实现程序的模块化5.语法限制不太严格,程序设计自由度大.(放宽了语法检查)例:1)对数组下标越界不作检查,由程序编写者自己保证程序的正确;2)整型数据、字符型数据、逻辑型数据可以通用。

C语言程序设计基础-多态 82页PPT文档

C语言程序设计基础-多态 82页PPT文档

}
void print(int x, int y)
{ cout<<"Calling print(int, int) with " <<x<<", "<<y<< "\n";
}
void print(double x)
{ cout<<"Calling print(double) with "<<x<<"\n";
例: int fun(int );

fun(‘A’); // 将字符‘A’转换为int型
(1)隐式类型转换引起的二义性 隐式类型转换是由编译程序自动完成,易引起函数重载 的二义性,例如:
#include <iostream.h> float abs(float x)
// 浮点类型数据的绝对值函数
{
程序设计是计算机学科的 核心和灵魂
程序设计基础
多态性
1 多态性的基本概念
1、程序的多态性
多态性:在程序中同一符号或名字在不同情况下具有 不同解释,如:运算符 / *
多态性的两种最基本形式 编译时多态性:指在程序编译阶段即可确定下来的 多态性,由重载机制实现: 函数重载 运算符重载 运行时多态性:指必须等到程序动态运行时才可确 定的多态性,由继承结合虚函数的动态绑定实现。
float f=1.5; print(f);
Calling print(double) with 1.5
}
4、构造函数重载
为一个类提供了初始化对象的各种方法。
#include <iostream.h>

C++程序设计课件.多态性

C++程序设计课件.多态性

-11-
2.运算符重载的几个问题:
(1)定义:运算符重载是对已有的运算符赋予多重含义 , Software College of Northeast Normal University 使同一个运算符作用于不同类型的数据时,导致不同类型 的行为。C++允许同一运算符具有多种不同运算功能的机 制。
(2)为什么需要运算符重载:C++中预定义了许多运算符, 能够满足用户的一般应用要求,但是其运算的对象应是基 本数据类型,而不适用于用户自定义数据类型(如类),这可 以使用运算符重载。
a.双目运算:oprdl B oprd2 oprdl.operator B (oprd2)
b.单目运算 1)前置单目运算:U oprd oprd.operator U( ) 2)后置单目运算:oprd V 为区别前置单目运算函数要带有一个整型(int)形参。 oprd.operator V(int)
#include<iostream.h>
class point
{ private:
float x,y;
public:
point(float xx=0,float yy=0){x=xx;y=yy;}
float get_x(){return x;}
float get_y(){return y;}
point operator++();
//声明point类的对象
p3=p1+p2;
//两点相加
p4=p1-p2;
//两点相减
cout<<"p1+p2:x="<<p3.get_x()<<",y="<<p3.get_y()<<endl;

清华大学C语言教学课件(共16个PPT)第2个共33页

清华大学C语言教学课件(共16个PPT)第2个共33页

26、要使整个人生都过得舒适、愉快,这是不可能的,因为人类必须具备一种能应付逆境的态度。——卢梭

27、只有把抱怨环境的心情,化为上进的力量,才是成功的保证。——罗曼·罗兰


28、知之者不如好之者,好之者不如乐之者。——孔子

29、勇猛、大胆和坚定的决心能够抵得上武器的精良。——达·芬奇

30、意志是一个强壮的盲人,倚靠在明眼的跛子肩上。——叔本华
谢谢!
33
清华大学C语言教学课件(共16个PPT) 第2个
51、山气日夕佳,飞鸟相与还。 52、木欣欣以向荣,泉涓涓而始流。
53、富贵非吾愿,帝乡不可期。 54、雄发指危冠,猛气冲长缨。 55、土地平旷,屋舍俨然,有良田美 池桑竹 之属, 阡陌交 通,鸡 犬相闻 。

C第章多态性精品PPT课件

C第章多态性精品PPT课件

cout<<“area of a:”<<a.area()<<endl;
cout<<“area of c:”<<c.area()<<endl;
Point *p=&c;
cout<<“area of c:”<<p->area()<<endl;
}
第05章 多态性
信工计算机教研室
覆盖技术
☺a.area()表达式明确告诉编译器,它调用的 是Point的成员函数area,输出0。
☺c.area()表达式明确表示调用的是Circle的 成员函数area,输出19.6349。
☺因为指针p的数据类型是Point,根据赋值 兼容性规则,p->area(),调用的是Point 的成员函数,输出0。
第05章 多态性
信工计算机教研室
4、访问被覆盖的方法
class CPoint {
int x,y; public:
double area() { return 0;} };
第05章 多态性
信工计算机教研室
覆盖技术
class Circle: public Point {
double radius; public:
Circle(double a,double b,double r) : Point(a, b) { radius=r; }
{ num=int(a+0.5); } void show() { cout<<num<<endl; } };
第05章 多态性
信工计算机教研室
成员函数重载
void main() {

C语言程序设计教程ppt课件完整版pptx

C语言程序设计教程ppt课件完整版pptx
C语言的应用领域
计算机系统基本概念
计算机系统的组成 操作系统的基本概念 计算机中的数与编码
编程环境与工具安装配置
01
常见的C语言编程环境
02
安装与配置C语言编译器
使用集成开发环境(IDE)进行C语言编程
03
第一个C程序:Hello, World!
01
C程序的基本结 构
02
编写Hello, World!程序
应用场景
适用于需要根据特定条件提前终 止循环或跳过某些循环操作的情 况。
04 函数与模块化设计
函数定义和调用
01
函数定义
包括函数名、参数列表、返回值 类型和函数体等部分,用于描述 函数的功能和实现细节。
函数调用
02
03
函数声明
通过函数名和参数列表来调用函 数,实现相应功能并获取返回值 。
在使用函数之前,需要对函数进 行声明,以便编译器识别函数的 存在和调用方式。
THANKS FOR WATCHING
感谢您的观看
指针运算符
包括取地址运算符&和取值运算符*,分别 用于获取变量的内存地址和通过指针访问内 存中的数据。
动态内存分配函数(malloc, free)使用方法
malloc函数
用于在堆区动态分配指定大小的内存空间,并返回 分配内存的起始地址。
free函数
用于释放之前通过malloc函数分配的内存空间,防 止内存泄漏。
动态规划思想
动态规划是一种在数学、计算机科学和经济学中 使用的,通过把原问题分解为相对简单的子问题 的方式来求解复杂问题的方法。动态规划常用于 优化重叠子问题的计算。
回溯与分支限界法
回溯法是一种通过探索所有可能的候选解来找出 所有解的算法,而分支限界法是一种通过剪枝来 减少搜索空间的优化算法。回溯与分支限界法常 用于解决组合优化问题。

C多态性和虚函数专题学习PPT课件

C多态性和虚函数专题学习PPT课件
1 2020/7/20
整体 概述
一 请在这里输入您的主要叙述内容

请在这里输入您的主要 叙述内容
三 请在这里输入您的主要叙述内容
2 2020/7/20
5.1 C++的多态性 派生一个类的原因常常不仅是为了新添加一些描述新事例的变量和
操作函数,而是为了重新定义基类的成员函数。当基类的成员函数在派生 类中重新定义时,其结果是使对象呈现多态性。因此不是整个类都具有多 态性,而是只有类成员函数具有多态性。这种实现方式与自然语言中对动 词的使用很类似。此时动词等价于C++的成员函数。例如一个对象若用 “它”来表示,则在现实生活中可以这样使用:“清洗它,移动它,分解 它,修理它”。这些动词仅代表了一般性动作,因为不知道发生在哪种对 象上。例如,移动铅笔所需的操作完全不同于移动机床所需的操作,尽管 这两个概念是相似的,只有知道“move移动操作”作用的对象,才能将 它与一系列特殊操作联系起来。显然对于不同的对象,“move移动操作 “的具体内容却大不一样。
3 2020/7/20
例 如 , 假 设 我 们 要 把 draw() 函 数 添 加 到 Point 和 Circle 类 中 , Point的draw()函数只是把一个点绘制在屏幕上,而Circle的draw() 函数是以圆的形式画一连串点.
Point p; Circle c;
p.draw(10, 10); c.draw(10, 10, 4);
{ return Complex(real - c.real , imag - c.imag); }
void Print(const Complex &c) { if(c.imag < 0)
cout << c.real << c.imag << 'i' << endl;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

void show() const;
private:
double x,y;
double r;
};
#endif
.
18
例子2:抽象基类的例子(3/6)
//文件circle.cpp,实现类Circle #include "circle.h" Circle::Circle(double a, double b, double c) {
第15章 多态性
.
1
讲授内容
静态绑定和动态绑定的概念 多态性的意义和作用 虚函数的定义方法 抽象基类的作用和定义方法 虚析构函数的作用和使用方法 如何在程序中实现多态性
.
2
15.1 多态性的概念(1/5)
多态性:具有继承关系的类,其对象对 同一个函数调用可以作出不同的响应
同一个函数调用——同一条函数调用语句 不同的响应——执行不同的函数
x = a; y = b; r = c; } double Circle::area() const { return PI*r*r; }
.
6
15.1 多态性的概念(5/5)
多态性有助于提高程序的可扩展性
可以把控制模块与被操作的对象分开 可以添加已定义类的新对象,并能管理该对象 可以添加新类(已有类的派生类)的新对象,并能
管理该对象
常用的程序设计方法
为具有继承关系的类定义接口(虚函数) 用链表或数组组织所有对象 用基类指针操作这些对象
.
13
15.3 抽象基类和纯虚函数(2/4)
解决方法
不实现这些接口:纯虚函数 包含纯虚函数的类:抽象基类
抽象基类不能实例化对象
形状类Shape的对象是什么?
.
14
15.3 抽象基类和纯虚函数(3/4)
纯虚函数
没有函数体的“初始化为0”的函数 //纯虚函数 virtual double area() const = 0;
main()
{
Base *bPtr, bObj;
Derived dObj;
bPtr= &bObj;//基类指针指向基类对象 bPtr->show(); //用基类指针调用成员函数,动态绑定 bPtr= &dObj;//基类指针指向基类对象 bPtr->show(); //用基类指针调用成员函数,动态绑定
#define __CIRCLE__H__
#include "shape.h"
#define PI 3.1416
class Circle :public Shape {
public:
Circle(double = 0.0, double = 0.0, double = 1.0);
double area() const;
class Shape { public:
virtual double area() const = 0; virtual void show() const = 0; };
#endif
.
17Βιβλιοθήκη 例子2:抽象基类的例子(2/6)
//文件circle.h,定义派生类Circle
#if !defined __CIRCLE__H__
.
7
15.2 虚函数
虚函数的定义
在函数原型前加上关键字virtual 如果一个函数在基类中被声明为虚函数,则
他在所有派生类中都是虚函数(包括重定义 函数)
virtual void show();
只有通过基类指针或引用调用虚函数才 能引发动态绑定
.
8
例子1:虚函数与多态性例子(1/3)
//文件base.h //定义基类 #if !defined __BASE__H__ #define __BASE__H__ #include <iostream.h>
return 0;
}
.
11
程序运行如果
I am Base's object! I am Derived's object!
.
12
15.3 抽象基类和纯虚函数(1/4)
实现多态性的前提
需要有共同的基类 需要在基类中定义共同的接口 接口要定义为虚函数
如果基类的接口没办法实现怎么办?
如形状类Shape
class Derived :public Base{ public:
void show() { cout<<"I am Derived's object!\n";
} };
#endif
.
10
例子1:虚函数与多态性例子(3/3)
//文件ex15_2.cpp //测试多重继承的类层次
#include "derived.h"
.
3
15.1 多态性的概念(2/5)
静态绑定和动态绑定
静态绑定——编译时就能确定一条函数调用 语句要调用的函数
和面向对象的思想不太相符 一条指令对应不同对象的不同操作——现实需要
.
4
15.1 多态性的概念(3/5)
静态绑定和动态绑定
动态绑定:运行时才能确定函数调用语句调 用的函数
调用对象的成员函数时(通过引用或指针),编 译器暂不确定要调用的函数
纯虚函数不需要实现
.
15
15.3 抽象基类和纯虚函数(4/4)
抽象类和具体类
包含纯虚函数的类不能实例化对象,是抽象 类
如果抽象类的派生类实现了所有基类中的纯 虚函数,则不再是抽象类
抽象类存在的意义是作为其它类的基类, 也叫抽象基类
.
16
例子2:抽象基类的例子(1/6)
//文件shape.h //定义抽象基类Shape #if !defined __SHAPE__H__ #define __SHAPE__H__ #include <iostream.h>
编译器检查被调用函数是否存在(函数名、参数 列表、返回值)
程序运行时,系统根据接收消息的对象类型来确 定要调用的函数
.
5
15.1 多态性的概念(4/5)
多态性的实现
通过基类指针或引用调用虚函数 动态绑定
多态性有助于更好地对程序进行抽象
控制模块能专注于一般性问题的处理 具体的操作交给具体的对象去做
class Base { public:
virtual void show() { cout<<"I am Base's object!\n";
} };
#endif
.
9
例子1:虚函数与多态性例子(2/3)
//文件derived.h //定义基类Derived #if !defined __DERIVED__H__ #define __DERIVED__H__ #include "base.h"
相关文档
最新文档