版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章 面向对象的C+,目 标,掌握如何创建类和 对象 掌握类中函数的设计 掌握类中属性的设置 了解对象的使用 掌握复杂的类成员设置,类和对象,对象表示现实世界中某个具体的事物。 抽象是从特定的实例中抽取共同的性质以形成一般化概念的过程-类。 对象具有两方面的含义: 在现实世界中: 是客观世界中的一个实体 在计算机世界中: 是一个可标识的存储区域,Chapter 2: Class and Object,2020/8/13 19:05,第 4 页,Car x1; Car x2; Car xN;,面向对象的概念,类和对象,类是具有共同属性和行为的对象的抽象。 类可以定义为数据和函数的集合。 类也称
2、为模板,因为它们提供了对象的基本框架。,类,对象,抽象,实例化,属性或状态,操作或行为,数据或变量,函数,封装的实体=数据+函数,2.1 C+中的类,基础类库 自定义类,(更具灵活性的类),优点: 1. 安全性得以加强 2.更有组织性, 更易理解维护 3.提高了程序的再利用率,采用 类 构成的程序,程序的再利用,带号电话卡,电 话 卡,IP 卡,IC 卡,201 卡,2.2 类的声明方式,C+类由状态(属性)和行为组成,变量 和 函数 组成,class point int x ; int y ; void show() cout x “ , “ y ; ,1 形 式,类的声明 类体 ,成员变量
3、的定义,成员函数 的定义,类 class 类名 public : 公有成员 (外部成员) private : 私有成员 protected : 保护型成员 ,面向对象基本概念对象,对象的形象表示:,面向对象基本概念对象,对象的定义:,对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个封装体有可以唯一地标识它的名字,而且向外提供一组服务(即公有的操作)。,面向对象基本概念对象,对象的定义:,对象中的数据表示对象的状态,一个对象的状态只能由该对象的操作来改变。每当需要改变对象的状态时,只能由其它对象向该对象发送消息,对象响应消息时,按照消息模式找出与之匹配的方法,并执行该方法。,面
4、向对象基本概念对象,以数据为中心 对象是主动的 实现了数据封装 本质上具有并行性 模块独立性好,以数据为中心,对象的基本特点,面向对象基本概念对象,以数据为中心 对象是主动的 实现了数据封装 本质上具有并行性 模块独立性好,对象是主动的,对象的基本特点,面向对象基本概念对象,以数据为中心 对象是主动的 实现了数据封装 本质上具有并行性 模块独立性好,实现了数据封装,对象的基本特点,面向对象基本概念对象,以数据为中心 对象是主动的 实现了数据封装 本质上具有并行性 模块独立性好,本质上具有并行性,对象的基本特点,面向对象基本概念对象,以数据为中心 对象是主动的 实现了数据封装 本质上具有并行性
5、模块独立性好,对象的基本特点, 模块独立性好,面向对象基本概念属性,什么是属性?,属性就是类中所定义的数据,它是对客观世界所具有的性质的抽象。 类的每个实例都有自已特有的属性值。,面向对象基本概念方法1,什么是方法?,【例】 为了Circle类的对象能够响应让它在屏幕上显示自已的消息Show( 绿色 ),在Circle类中必须给出成员函数Show(int color)的定义,也就是要给出这个成员函数的实现代码。,方法就是对象所能执行的操作,也就是类中所定义的服务(即函数)。,面向对象基本概念方法2,什么是方法?,方法即对象的能力,它是允许作用于该类对象上的各种操作,是实现对象所具有的功能操作的
6、代码段。,方法的性质: 方法与消息是一一对应的 每个方法由函数名和说明该成员函数的算法实现的一段代码所组成。 方法必须包含于类中,并紧紧依附于类。,main( ) Date d1, d2; Date ,课堂练习 : 1圆类: 数据 ( 半径 ) 函数( 设置半径, 显示, 周长计算 ) 2长方形类: 数据 ( 长 , 宽 ) 函数( 设置长和宽, 显示, 面积计算 ) 3圆锥体类: 数据 ( 底半径 , 高 ) 函数( 设置底半径和高, 显示, 体积计算 ),2 构 造 函 数,构造函数名称与类名称相同 构造函数没有返回类型 其任务是在创建对象时初始化其状态,void main ( ) cub
7、e my1 (10 , 20) ; cube my2 ( 8 , 4 ) ; my1 . fun( ) ; my2 . fun ( ) ; ,见书P27页,class cube private: double width ; double height ; public : cube ( double x , double y ) width = x ; height = y ; double fun ( ) return width * height; ,构造函数的多种形式,形式1: date ( ) year =2004; month=11; day=23 ; ,形式2: date ( i
8、nt x=2004, int y=11, int z=23) year =x; month=y ; day=z ; ,形式3: date ( int z ) day=z ; ,重载构造函数,C+ 为每一个类自动提供缺省构造函数 缺省构造函数将成员变量的值初始化为缺省值 一旦创建了自己的构造函数,缺省的构造函数将不复存在。 重载构造函数提供了一组创建对象的方式,可以根据需要决定是否带初始参数。,class c int x; public: c () x=0; cout不带参数的构造函数; c (int a) x=a; cout 带一个参数的构造函数“ ; ,2. 析 构 函 数,特征: 公 有
9、无 返 回 值 函数名为: 类名 无参数 一个类中只能有一个(不能重载) :唯一性 调用方式: 自 动 调 用, 人 为 调 用,见书P29页,2.3 对 象 成 员, 子对象,class clock class Date int year , month, day ; clock k ; public : Date (clock x, int a , int b , int c ):k(x) , year (a) ,month (b) ,day (c) ,Date (int i , int j , int k , int a , int b , int c ): k ( i , j, k )
10、 , , 子对象,class point int x; int y ; public : void set (int i , int j ) x= i ; y = j ; int get_y( ) return y ; ;, 子对象,class A . ;,class box int length , width ; point a; public : void set (int l, int w, int s, int p) length = l ; width = w; a.set (s, p) ; int get_area( ) return length * width ; ,main
11、 ( ) box b1, b2 ; b1 . set (2, 5,0,0 ) ; b2 . set (5, 6, 10, 20); cout “b1面积是: ” b1. get_area( ) endl ; cout “b2面积是: ” b2. get_area( ) endl ; ,b1面积是: 10 b2面积是: 30,2.4 对象数组,Date x6 ;,代表了六个对象: x0 , x1 , x2 , x3 , x4 , x5,(2001,5,9), (2004,8,12), (2002,1,7), (2003,12,6), (2002,6,23), (2007,9,30),见书P30页
12、,Date x6 =Date (2001,5,9), Date (2004,8,12) ;,Date x6 = (2001,5,9), (2004,8,12) ;,Date x6 =Date (2001,5,9), (2004,8,12) ;,x2.show() ; x0.year ; x5.month ;,访问类中成员的方式:,只能访问公有成员,2.5 对象的指针,1. 指向对象的指针,Date d( 2005, 9, 10 ) ; Date * p ; p = ,(* p) .show () ; (* p) . set (2000, 8, 15 ) ;,d.show () ; d . se
13、t (2000, 8, 15 ) ;,p - show () ;,见书P32页,2. this 指针,void Data : : fun ( ) coutyear monthday ; main() Date d1(2005, 9, 30); d1. fun( ); ,cout year month day ;,见书P34页,自引用指针,2.6 友 元,1.友 元 函数 方式: friend 函数 ;,要求: 对象作形参 可公, 可私,class time public : friend void fun ( time t ) ; ,见书P36页,void fun ( time t ) if
14、( t . hour 12 ) t . hour = t . hour 12 ; cout t . hour t . Minute t .second; else cout t . hour t . Minute t .second; ,main( ) time t (20, 45, 10) ; fun ( t ) ; ,2. 友 元 类,方式: class 类A public : friend class 类B ; , 单向性 友元关系不能传递,见书P38页,class A private : int x ; public : A ( ) x=5; friend class B ; clas
15、s B public : void fun( A a ) a. x+ ; cout a.x ; ,void main() A m ; B n; n . fun (m) ; ,void sub (A a ) a. x - - ; cout a.x ;,n . sub (m) ;,2.7 静态成员,1 静态数据成员,是所有对象的“公共财产”,class Date public: private: int month, day; static int year; ,要在类外初始化赋值:int Date : year =2005;,见书P39页,main( ) Date d1(11, 26), d2(
16、5, 20); d1 . show ( ); d2 . show ( ); ,2005 11 26 2005 5 20,2 静态函数成员,不能直接访问非静态数据成员,但可直接访问静态成员。,class Date public: static void fun ( Date d ) cout year; cout d . month d . day; ;,调用方式: d1 . fun( ); d2 . fun( ); Date : : fun( );,图形,多边形,椭圆,继承 / 派生 原理,圆,五边形,三角形,矩形,2.8 继承和派生,职 员,学 生,在职学生,2.8 继承和派生,1. 派 生
17、 原 理,(1)过 程: 吸收已有类的成员 调整已有类的成员 添加新成员,point,point,point,Circle (半径 ),Square ( 边长),Rectangle ( 长,宽),类的层次结构为树状结构,父类为树的根节点或分支结点。,图2-1 类层次结构图举例,图2-2 错误的类层次结构图,(2) 声 明 方 式:,单继承: class 派生类名: 继承方式 基类名 派生类新成员 ,多继承: class 派生类名: 继承方式 基类1 , 继承方式 基类2 派生类新成员 ,class A public : void fa ( ) cout i j; protected : int
18、 j; private : int i; ,class B public : void fb ( ) cout x y; protected : int y; private : int x; ,: public A,: protected A,: private A,2. 派 生 方 式,公 有 基 类 public protected private,派 生 类 public (派) + public (基) protected(派) +protected (基) private (派),思考: class C : public B public : void fc( ); protect
19、ed : int m; private: int n; ,( 2 ) 保 护 基 类 public protected private,派 生 类 public (派) protected(派) + public (基) +protected (基) private (派),class C : protected B public : void f c ( ); protected : int m ; private: int n; ,( 3 ) 私 有 基 类 public protected private,派 生 类 public (派) protected(派) private (派)
20、 + public (基) +protected (基),class C : private B public : void f c ( ); protected : int m ; private: int n; ,带号电话卡,电 话 卡,IP 卡,IC 卡,201 卡,余额 查询余额,IC方式拨打电话,卡号 密码 接通状态 登陆,有效日期 IP方式拨打电话,附加费 201方式拨打电话,class PhoneCard public: staticdouble money; public: void getmoney() cout“您的余额为: moneyendl; double PhoneC
21、ard: money = 30.00 ;,class IC_card : public phoneCard public: bool phonecall() if(money0.6) return true ; else return false; ,class number_card : public phoneCard static long num; static int password; bool connect ; public: bool ifpass ( long a , int b ) if (num=a,class IP_card : public number_card
22、public: bool phonecall ( ) if (money0.3) return true ; else return false ; ,没加日期验证的写法,class IP_card : public number_card char x10; public: bool phonecall ( ) char z10=10/21/07; _strdate( x); cout0.3 ,加入日期验证的写法,class 201_card : public number_card double d; public: bool phonecall() d=0.1; if (money ( 0.3+d ) ) money - = ( 0.3+d ) ; return true ; else return false ; ,2.9 类的多重继承,不可访问(无法访问) 基类private 属性:派生类对象虽拥有基类的数据特征却无法访问它 私有成员: 派生类(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年护理学:老年护理实践技能
- 胸科手术并发症观察与处理
- 4s店前台绩效考核制度
- 审计存货管理制度
- 京东方审计监察制度
- 中医病房绩效考核制度
- 审计信息专报制度
- 京东专员绩效考核制度
- 外部审计日常管理制度
- 审计工作回访制度
- DB23∕T 2583-2020 固体矿产勘查放射性检查技术要求
- 【《森吉米尔二十辊轧机探析及建模仿真探究》17000字】
- 上海市上海交大附中2026届化学高一上期末教学质量检测试题含解析
- 2025年北京建筑大学专升本城市轨道交通车辆构造考试真题及答案
- 2026甘肃省公务员考试题及答案题型
- 2026河北省考行测题量试题及答案
- 台球室合同转让协议书
- 《弹簧测力计》教案
- 2025年无人机驾驶员职业技能考核试卷:无人机维修与故障排除试题
- 2025至2030中国公路勘察设计行业发展研究与产业战略规划分析评估报告
- 2025年大学辅导员招聘考试题库(教育心理)简答题
评论
0/150
提交评论