C语言程序设计(第二版) 教学课件 ppt 作者 刘克成 张凌晓 ch10

上传人:E**** 文档编号:89423241 上传时间:2019-05-25 格式:PPT 页数:21 大小:790.50KB
返回 下载 相关 举报
C语言程序设计(第二版) 教学课件 ppt 作者 刘克成 张凌晓 ch10_第1页
第1页 / 共21页
C语言程序设计(第二版) 教学课件 ppt 作者 刘克成 张凌晓 ch10_第2页
第2页 / 共21页
C语言程序设计(第二版) 教学课件 ppt 作者 刘克成 张凌晓 ch10_第3页
第3页 / 共21页
C语言程序设计(第二版) 教学课件 ppt 作者 刘克成 张凌晓 ch10_第4页
第4页 / 共21页
C语言程序设计(第二版) 教学课件 ppt 作者 刘克成 张凌晓 ch10_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《C语言程序设计(第二版) 教学课件 ppt 作者 刘克成 张凌晓 ch10》由会员分享,可在线阅读,更多相关《C语言程序设计(第二版) 教学课件 ppt 作者 刘克成 张凌晓 ch10(21页珍藏版)》请在金锄头文库上搜索。

1、第10章 面向对象程序设计,结构化程序设计与面向对象程序设计 面向对象程序设计的基本概念 面向对象程序设计的基本特点 类和对象 继承和派生 多态性 面向对象的软件开发,10.1 结构化程序设计与面向对象程序设计,结构化程序设计的思路是:自顶向下、逐步求精,其程序结构是按功能划分为若干个基本模块,这些模块形成一个树状结构;各模块之间的关系尽可能简单,在功能上相对独立;每模块内部均是由顺序、选择和循环三种基本结构组成;模块实现的方法是调用子模块,结构化程序设计由于采用了模块化分解与功能抽象以及自顶向下、分而治之的方法具有很多的优点,但它仍是一种面向过程的程序设计方法:它把数据和处理数据的过程分离为

2、相互独立的实体,面向对象方法所强调的基本原则,就是直接面对客观存在的事务进行软件开发,将人们日常生活的习惯的思维方式和表达方式应用在软件开发中,使软件开发从过分专业化的方法、规则和技巧回到客观世界,回到人们通常的思维方式,例10.1 对时钟设置时间并显示时间 #include struct time int hour, minute, second; t1; void showtime( ) printf(“%d:%d:%dn“,t1.hour,t1.minute,t1.second); void settime(int hour,int minute,int second) t1.hour=

3、hour; t1.minute=minute; t1.second=second; void main() settime(8,30,30); showtime(); ,例10.2 #include class Clock int hour,minute,second; public: Clock() hour=0;minute=0;second=0; void settime(int h,int m,int s) hour=h;minute=m;second=s; void showtime() couthour“:“minute“:“secondendl; ;,#include“clock

4、.h“ void main() Clock c1; c1.settime(8,30,30); c1.showtime(); ,10.2 面向对象程序设计的基本概念,对象是指现实世界中无所不在的各种各样的实体 ,在面向对象的程序设计中将该实体的属性(用数据成员表示)和行为(用操作数据的函数成员表示)封装在一个整体里,且每一个实体都有所属的类,类是对一组对象共同具有的属性和行为的抽象,它提供了一个具有特定功能的模块和一种代码共享的手段 ,它具有以下特性:封装和隐藏 、继承 类是一组对象的抽象,而对象则是类的一个实例;在程序中,从语法来看,类和对象的关系相当于数据类型和变量的关系,消息是向某对象请求

5、服务的一种表达式,如果用户或其他对象提出服务请求,便可以称为向该对象发送消息 ;在面向对象的程序中,程序执行是靠对象之间传递消息来完成的,方法是一个函数成员,是对某个对象接受了某一消息后所采取的一系列操作的描述,10.3 面向对象程序设计的基本特点,抽象性:抽象是指忽略一类事物中与当前处理问题的主题无关的细节,包括数据抽象和代码抽象两方面 ,对应于对象的属性和行为,封装性:封装是将抽象得到的数据和代码集合在一个整体里的过程 ,能对内部细节起隐藏保护的作用,类内某些成员可以以对外隐藏的属性被保护起来,继承性:在面向对象程序设计中,继承是一种连接类与类的层次模型,利用现有类派生新类的过程即称为类的

6、继承 ; 新类(子类或派生类)拥有原有类(父类或基类)的特性,又可增加自身新的特性,除了编程代码共享机制,继承还具有传递机制,即最下层的子类可继承其上各层父类的全部特性,多态性是指发出同样的消息被不同类型对象接收时导致的完全不同的行为 ,多态性通常表现为:函数重载、运算符重载、虚函数,10.4 类和对象,一、类的定义,class 类标识符 public: 成员函数或数据成员说明; private: 成员函数或数据成员说明; protected: 成员函数或数据成员说明; ;,说明: class为类的关键字,其后跟的类标识符为类名 类的定义包括说明和实现部分,说明部分用来说明类的成员,实现部分用

7、来定义成员函数,若成员函数在说明部分已经给出定义,则实现部分可以省略 类的成员包括数据成员和函数成员(方法),数据成员主要描述本类事物的静态属性,函数成员是本类事物所具有的行为 public(公有)、private(私有)、protected(保护)被称为访问权限修饰符,出现的顺序、次数没有规定,缺省是为private,它们决定了其后的成员的访问属性 类的数据成员的数据类型可以是任何数据类型,但不能用auto、register或extern修饰,并且在声明时不能进行初始化,private后声明的数据成员和成员函数只能被类的成员和友元函数访问; public后声明的数据成员和成员函数没有访问限制

8、; protected同private基本相似,不同:子类可以使用protected之后声明的数据成员和成员函数,但不能使用private之后声明的数据成员和成员函数,例如: class Clock int hour, minute, second; public: void settime( int h, int m, int s ); void showtime( ); ; void clock:settime( int h, int m, int s ) hour=h; minute=m; second=s; void clock:showtime( ) couthour“:“minut

9、e“:“secondendl; ,二、对象的定义 1. 定义形式: 类名 对象名表列;,例: Clock c1, c5, * p;,2. 对象成员引用 在类的外部,通过对象只能访问类的public(公有)成员 一般对象成员引用 数据成员: 对象名.成员名 函数成员: 对象名.成员名( 参数列表 ) 通过指针引用对象的成员 数据成员: 对象指针名-成员名 或 (*对象指针名).成员名 函数成员: 对象指针名-成员名( 参数列表 ) 或 (*对象指针名).成员名( 参数列表 ),三、对象的初始化 构造函数 功能:在创建对象时,使用给定的值初始化对象的数据成员 特点: 与类名相同且不能指定任何返回类

10、型 可以重载,即可以定义多个参数类型或个数不同的构造函数 在创建对象时由系统自动调用,在程序中不能直接调用 当没有为一个类定义任何构造函数时,C+编译器为它建立缺省构造函数,2. 析构函数 功能是用来释放对象的 特点: 函数名与类同名,为了区别构造函数,其前加一个“” 构造函数没有参数,不能重载,即一个类只能定义一个析构函数 可以由系统调用,也可以由程序调用,3. 拷贝构造函数 功能:将一个已知对象的数据成员的值拷贝给正在创建的另一个同类的对象 特点: 只有一个参数,参数类型为本类对象的引用 如果类中没有说明拷贝构造函数,则编译系统会自动生成一个缺省的拷贝构造函数,其形式为: 类名:类名( c

11、onst 类名 & 引用名 ),例10.3 定义一个点类,描述其平面上的坐标,并能得到并显示其X值和Y值 #include class Point int X,Y; public: Point( int xx, int yy ) X = xx; Y = yy; cout“构造函数被调用!n“; Point( Point ,10.5 继承和派生,一、派生类的定义,派生类的定义格式如下: class : private: 各私有成员说明; public: 各公有成员说明; protected: 各保护成员说明; ; 其中: 的一般格式为: 派生方式 基类名1,派生方式 基类名n,继承又分单基继承和

12、多基继承 派生方式有private、public、protected,对应各派生方式的基类成员在派生类中的访问权限如下:,例10.4 利用圆类派生出圆柱体类,并增加一个新的数据成员:圆柱体的高h #include class Circle double x, y, r; public: void SetC( double xx, double yy, double rr ) x = xx; y = yy; r = rr; void Disp( ) cout“Cirle(“x,y)endl; cout“radious=“rendl; ; class Cylinder : public Circl

13、e double h; public: void SetCY( double xx, double yy, double rr, double hh ) SetC( xx, yy, rr ); h = hh; void Disp() Circle:Disp( ); cout“h=“hendl; ; void main() Cylinder c1; c1.SetCY( 0, 0, 4, 6 ); c1.Disp( ); ,可见,派生类生成过程包含三个步骤: 吸收基类的成员 改造基类的成员 添加新的成员,10.6 多态性,一、函数重载 函数重载指的是,允许多个不同函数使用同一个函数名,但要求这些同

14、名函数具有不同的参数表,要求必具下面三点之一 : 参数表中的参数个数不同; 参数表中对应的参数类型不同; 参数表中不同类型参数的次序不同,多态性是指同一个操作作用于不同的对象就会产生不同的响应;多态性分为静态多态性和动态多态性,其中函数重载和运算符重载属于静态多态性, 虚函数属于动态多态性,例10.5: int abs(int n) return ( n0 ? -n : n ); float abs(float n) if ( f0 ) f = -f; return f; ,二、运算符重载 运算符重载是对已有的运算符赋予多重含义,以使得同一个运算符作用于不同的对象导致不同行为 其重载规则为:

15、C+的运算符除个别之外,都可重载,但不允许重载非C+的运算符 重载之后优先级及结合性不变 运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造 运算符重载实质就是函数重载,故遵循函数重载的原则,语法定义形式: 函数类型 operator 运算符(形参表) 函数体; 程序中出现形式:(以双目运算符为例) c1 运算符 c2 编译程序解释形式: c1. operator运算符(c2),例10.6 复数运算 #include class Complex public: Complex( double r = 0.0, double i = 0.0 ) real = r; imag = i; Complex operator +( Complex c2 ); Complex operator -( Complex c2 ); void display( ); private: double real; double imag; ; Complex Complex:operator +( Complex c2 ) double x = real+c2.real; double y = imag + c2.imag; return Complex

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号