版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向对象编程技术第四章 第四章 类与对象 类和对象类和对象 构造函数与析构函数构造函数与析构函数 面向对象的基本特点面向对象的基本特点 类的组合类的组合 前向引用说明前向引用说明 类模板类模板/以后介绍以后介绍 面向对象标记面向对象标记 要点回顾要点回顾 认识事物的认识事物的 规律:由简规律:由简 单到复杂单到复杂!顺!顺 序体现第三版序体现第三版 本改进了本改进了 面向对象编程技术第四章 一、 类与对象 类概述类概述 类是具有相同属性和行为的一组对象的抽象集合, 为该类的全部对象提供了统一的抽象描述,包括 属性和行为两个主要部分。 利用类可以实现数据的封装、隐藏、继承与派生。 利用类易于编写
2、大型复杂程序,其模块化程度比 C中采用函数更高。 慢慢体会慢慢体会 面向对象编程技术第四章 类是一种用户自定义类型,声明形式: class 类名 public: 公有成员(外部接口) private: 私有成员 protected: 保护型成员 2. 类的定义:类的定义: 面向对象编程技术第四章 时钟类的成员 (数据成员与函数成员声明) class Clock private: int Hour, Minute, Second; public: void SetTime(int NewH, int NewM, int NewS); void ShowTime( ); ; 成员函数成员函数 数据
3、成员数据成员 面向对象编程技术第四章 void Clock : SetTime(int NewH, int NewM, int NewS) Hour=NewH; Minute=NewM; Second=NewS; void Clock : ShowTime( ) coutHour:Minute:Second; 时钟类的函数成员(定义部分) 面向对象编程技术第四章 说明说明: 关键字public后面声明公有类型成员 它们是类与外部的接口,任何外部函数都可以访问公有类 型数据和函数 关键字private后面声明私有类型成员 允许本类中的函数访问,类外部的任何函数都不能访问。 紧跟在类名称的后面声明
4、私有成员,关键字private可省略 (不提 倡) 面向对象编程技术第四章 说明: 3.保护类型与private类似,其差别表现在继承与派生时对派 生类的影响不同,在第七章介绍。 下页下页 例子例子 面向对象编程技术第四章 class circle public: circle:circle(int r) radius=r; int area() return (int)3.14*radius*radius; void circle_prt() coutthe private radius is:radiusendl; private: int radius; ; void main() ci
5、rcle circle1(1),circle2(3); coutthe private radius is: circle1.radius成员名”方式访问 public 属性 的成员 返返 回回 面向对象编程技术第四章 二、构造函数与析构函数 构造函数名与类名相同 构造函数的作用是在对象被创建时使用特定的值构造对象, 或者说将对象初始化为一个特定的状态。 在对象创建时由系统自动调用。 如果程序中未声明,则系统自动产生出一个缺省形式的构造 函数 1. 构造函数构造函数 定义及使用定义及使用 面向对象编程技术第四章 构造函数举例 class circle public: int radius; i
6、nt area(); circle(int r); int area(int r); ; circle:circle(int r) radius=r; int circle:area() return (int)3.14*radius*radius; void main() circle circle1(5); coutthe circles area is; coutcircle1.area()endl; 定义部分定义部分 面向对象编程技术第四章 构造函数与类同名 不能指定返回值类型不能指定返回值类型 可以是重载函数 可以是内联函数 如无自定义构造函数,C+系统自动产生空的的构造函数 如构造
7、函数带有参数,则在定义对象时必须带上相同类型的 实参 通过定义类的实例对象,只分配数据成员空间,共享类的共享类的 代码空间代码空间 注意:注意: 面向对象编程技术第四章 析构函数名:类名 完成对象被删除前的一些清理工作。 在对象的生存期结束的时刻系统自动调用它,然后再释放此 对象所属的空间。 如果程序中未声明析构函数,编译器将自动产生一个缺省的 析构函数。 析构函数不带任何参数 2. 析构函数析构函数 定义及使用定义及使用 请关注后请关注后 面的内容!面的内容! 面向对象编程技术第四章 析构函数举例 class Point public: Point(int xx,int yy); Point
8、( ); /.其它函数原形 private: int X,int Y; ; 包含:delete A delete B 面向对象编程技术第四章 注意 命名方式 一般类中设计有动态对象,则要设计析构函数 析构函数不带任何参数 面向对象编程技术第四章 课堂练习课堂练习(5分钟分钟): 1.定义一个表述圆的类(数据成员和函数成员),并提供相 应的方法 2. 定义一个表述人的类, (数据成员和函数成员),并提 供相应的方法 体会面向对象的 编程的特点 面向对象编程技术第四章 3.内联成员函数 为了提高运行时的效率,对于较简单的函数可以声明为 内联形式。 内联函数体中不要有复杂结构(如循环语句和switc
9、h语 句)。 类中声明内联成员函数的方式: 将函数体放在类的声明中。 使用inline关键字。 内联函数两种声明方式:显示与隐式 隐式:直接定义 在类主体内 显示:定义在类 主体外,用inline 说明 请看请看 下页下页 注意何时采用?注意何时采用? 面向对象编程技术第四章 class Point public: void Init(int initX,int initY) X=initX; Y=initY; int GetX( ) return X; int GetY( ) return Y; private: int X,Y; ; class Point public: void Ini
10、t(int initX,int initY); int GetX( );); int GetY( );); private: int X,Y; ; inline void Point:Init(int initX,int initY) X=initX; Y=initY; inline int Point:GetX( ) return X; 隐式:隐式: 显式:显式: 面向对象编程技术第四章 当构造函数的参数为自身类对象的引用参数为自身类对象的引用时,这个 构造函数称为拷贝构造函数. 拷贝构造函数的功能是用一个已有对象初始化一 个正在建立的同类对象. 4.拷贝构造函数 已存在对象已存在对象 新对
11、象新对象 克隆克隆 面向对象编程技术第四章 拷贝构造函数在以下三种情况下会被调用:拷贝构造函数在以下三种情况下会被调用: 当用类的一个对象去初始化该类的另一个对象时; 如果函数的形参是类对象类对象,调用函数进行形参和实参结合时; 如果函数的返回值返回值是类对象,函数调用完成返回完成返回时。 何时需要何时需要 它?它? 面向对象编程技术第四章 定义: class 类名 public : 类名(形参);/构造函数 类名(类名类名 /拷贝构造函数 等价于等价于 Point a(a1); /可以改成这种形式 Point:Point (Point Y=p.Y; cout拷贝构造函数被调用 endl; c
12、lass Point public: Point(int xx=0,int yy=0)X=xx; Y=yy; Point(Point int GetX( ) return X; int GetY( ) return Y; private: int X,Y; ; 请看请看 下页下页 面向对象编程技术第四章 当用类的一个对象去初始化该类的另一个对象时 系统自动调用它实现拷贝赋值。 void main(void) Point A(1,2); Point B(A); /拷贝构造函数被调用拷贝构造函数被调用 coutB.GetX( )endl; 情形之一情形之一 面向对象编程技术第四章 若函数的形参为类
13、对象,调用函数时,实参 赋值给形参,系统自动调用拷贝构造函数。 例如: void fun1(Point p) coutp.GetX( )endl; void main( ) Point A(1,2); fun1(A); /调用拷贝构造函数调用拷贝构造函数 情形之二情形之二 面向对象编程技术第四章 当函数的返回值是类对象时,系统自动调 用拷贝构造函数。例如: Point fun2( ) Point A(1,2); return A; /调用拷贝构造函数调用拷贝构造函数 void main( ) Point B; B=fun2( ); 情形之三情形之三 要看明白书上要看明白书上 的例子的例子 返返
14、 回回 面向对象编程技术第四章 三、面向对象的基本特点 抽象抽象是对具体对象(问题)进行概括,抽出这一类 对象的公共性质并加以描述的过程。 数据抽象:描述某类对象的属性或状态(对象相互区别 的物理量)。 代码抽象:描述某类对象的共有的行为特征或具有的功 能。 之抽象之抽象 ?如何实现抽象如何实现抽象 通过类的定义。 面向对象编程技术第四章 三、面向对象的设计思想 层层分类层层分类,使概念逐渐细化,即具体化。 例如,生物分为动物和植物,动物又分为脊椎动物 和无脊椎动物,脊椎动物包括哺乳动物,哺乳动物 又分为猫、狗,等等 之分类之分类 回回 顾顾 面向对象编程技术第四章 三、面向对象的设计思想 将
15、抽象出的数据成员、代码成员相结合,将它们 视为一个整体。 增强安全性和简化编程,不必了解具体的实现细节, 只需要通过外部接口,以特定的访问权限,来使用类 的成员。 1. 实现封装:类定义中的 之封装之封装 在设计者允许在设计者允许 的权限下的权限下 面向对象编程技术第四章 三、面向对象的设计思想 子类与父类 子类继承父类所有的属性、方法,并可定义自己的特有 属性与方法 提高软件开发效率,为软件复用提供强有力的支持 1. 多种多种继承方式:公有、私有、保护;单继承、多继承 之继承之继承 面向对象编程技术第四章 三、面向对象的设计思想 之多态之多态 定义:指类具有相似功能的不同函数使用同一个名称
16、来实现 如: 1.运算符重载 2.函数重载 3.虚函数 慢慢领会慢慢领会 面向对象编程技术第四章 插入语插入语 学习复杂、严密的C+语法体系 C+既考虑设计理念的先进性,又兼顾程序 执行的效率! 理解、领会、运用其中的优秀的面向对象程 序设计、分析思想! 返返 回回 是否感觉有是否感觉有 点烦!点烦! 面向对象编程技术第四章 四、类的组合 类中的成员数据是另一个类的对象类的对象可以在已有的抽 象的基础上实现更复杂的抽象 注意是对注意是对 象象 面向对象编程技术第四章 例例: class Point private: float x,y; /点的坐标 public: Point(float h,
17、float v); /构造函数 float GetX(void); /取X坐标 float GetY(void); /取Y坐标 void Draw(void); /在(x,y)处画点 ; /.函数成员部分,略 面向对象编程技术第四章 class Line private: point p1,p2; /线段的两个端点 public: Line(Point a,Point b); /构造函数 Void Draw(void); /画出线段 ; /.函数的实现略函数的实现略 面向对象编程技术第四章 1.如何设计组合类的构造函数?如何设计组合类的构造函数? 原则:原则:不仅要负责对本类中的基本类型成员数
18、据赋初值, 也要对对象成员初始化。 声明形式:声明形式: 类名:类名(形参,本类成员形参) :内嵌对象1(参数),内嵌 对象2(参数),. 本类初始化 注意注意 否则可能是否则可能是 一个不确定一个不确定 的值的值 面向对象编程技术第四章 2.组合类的构造函数调用组合类的构造函数调用 构造函数调用顺序:构造函数调用顺序: 若调用缺省构造函数(即无形参的),则内嵌对象 的初始化也将调用相应的缺省构造函数。 内嵌对象的构造函数 内嵌对象是客人;内嵌对象是客人; 声明顺序声明顺序 调用本类的构造函数 调用本类的析构函数 内嵌对象的析构函数 构造:构造: 析构:析构: 穿衣服与穿衣服与 脱衣服脱衣服
19、面向对象编程技术第四章 class Point/Point类声明 public: Point(int xx=0, int yy=0) X=xx;Y=yy; coutpoint 的构造函数被调用endl; Point(Point int GetX() return X; int GetY() return Y; private: int X,Y; ; Point:Point(Point Y=p.Y; coutPoint拷贝构造函数被调用endl; 面向对象编程技术第四章 class Line/Line类的声明 public: /外部接口 Line (Point xp1, Point xp2);
20、Line (Line double GetLen()return len; private:/私有数据成员 Point p1,p2;/Point类的对象p1,p2 double len; ; /组合类的构造函数 Line: Line (Point xp1, Point xp2) :p1(xp1),p2(xp2) coutLine构造函数被调用endl; double x=double(p1.GetX()-p2.GetX(); double y=double(p1.GetY()-p2.GetY(); len=sqrt(x*x+y*y); 面向对象编程技术第四章 Line: Line (Line
21、len=Seg.len; /主函数 void main() Point myp1(1,1),myp2(4,5);/建立Point类的对象 Line line(myp1,myp2);/建立Line类的对象 Line line2(line);/利用拷贝构造函数建立一个新对象 coutThe length of the line is:; coutline.GetLen()endl; coutThe length of the line2 is:; coutline2.GetLen()endl; 面向对象编程技术第四章 面向对象编程技术第四章 例例2: 整体类整体类 部部 件件 子子 类类 1 部部
22、 件件 子子 类类 2 部部 件件 子子 类类 n 代码框架代码框架 面向对象编程技术第四章 class Whole /整体类整体类 public: Whole( ); Whole(int i,int j,int k); Whole( ); void Print( ); private: Part one; Part two; int date; ; class Part /部件类部件类 public: Part( ); Part(int i); Part( ); void Print( ); private: int val; ; 下页定义整体类的构造函数下页定义整体类的构造函数 面向对象编
23、程技术第四章 Whole:Whole( ) date=0; Whole:Whole(int i,int j,int k): two(i),one(j),date(k) . /.其它函数的实现略其它函数的实现略 返返 回回 面向对象编程技术第四章 五、前向引用声明五、前向引用声明 类应该先声明,后使用 如果需要在某个类的声明之前,引用该类,则 应进行前向引用声明。 前向引用声明只为程序引入一个标识符,没有 具体定义,不能使用该类的具体细节(如对象)。 具体参考教材 P112113 面向对象编程技术第四章 前向引用声明举例前向引用声明举例: class B; /前向引用声明前向引用声明 class
24、 A public: void f(B b); ; class B public: void g(A a); ; 返返 回回 面向对象编程技术第四章 template 类声明 六、类模板六、类模板 使用类模板使用户可以为类声明一种模式,使 得类中的某些数据成员、某些成员函数的参数、 某些成员函数的返回值,能取任意类型(包括系 统预定义的和用户自定义的) 目的目的: 格式:格式: template 函数模板定义比较比较 面向对象编程技术第四章 书上的例子:请先阅读5mins struct student int id; float gpa; ; template class store priv
25、ate: T item; int havevalue; int flag; public: store(void); T getelem(void); void putelem(T x); ; template store:store():havevalue(1),flag(99) template T store:getelem(void) if(havevalue=0) coutno item present!endl; exit(0); else coutthe havevalue is:havevalueendl; coutthe flag is :flagendl; return i
26、tem; 这儿这儿 构造函数定义时,初始化其它数据成员构造函数定义时,初始化其它数据成员 可以改可以改 成成class 吗?吗? 返返 回回 面向对象编程技术第四章 template void store:putelem(T x) havevalue+; item=x; void main() student g=1000,23; stores1,s2; s1.putelem(3); s2.putelem(7); couts1.getelem() s2.getelem()endl; 返返 回回 面向对象编程技术第四章 class circle public: int havevalue; ci
27、rcle(int r); int area() return (int)3.14*radius*radius; void circle_prt() coutthe private radius is: radiusendl; private: int radius; ; circle:circle(int r):havevalue(3) radius=r; void main() circle circle1(1); circle * cp; cp= couthavevalue=:“; cout circle1.havevalueendl; circle1.circle_prt(); cout
28、out by pointer :“; couthavevalueendl; coutout the private data”; coutcircle1.radiusradius;/error 初始初始 化化 禁止访问禁止访问 私有数据私有数据 返回返回 返回返回 返返 回回 面向对象编程技术第四章 七、面向对象标记 两种方法两种方法 UML:统一建模语言 专业的面向对象建模语言,功能强大 较复杂 Coad/Yourdon 类图描述 简单明晰 难以描述成员的访问控制 面向对象编程技术第四章 OrderSystem DAO VBA VBRUN MSComDlg ComctlLib VB stdo
29、le UML 对象名对象名 数据成员数据成员 函数成员函数成员 类名类名 数据成员数据成员 函数成员函数成员 Coad/Yourdon 消息消息 继承包含 返返 回回 面向对象编程技术第四章 要点回顾要点回顾 1.类与对象的概念 2.基本类的定义与使用 1.类定义的格式:class name 2.访问控制 3. 对象创建与撤销 1.类内、类外的理解 2.数据成员与函数成员的区别 3.public 与private:公共接口与隐藏 1.构造、析构函数:公有、无返 回值 2.拷贝构造函数 3. 组合类 1.定义:类中内嵌对象 ? 问: 内嵌类的定义是组合类吗 2. 组合类构造与析构:调用顺序 4.
30、 类模板 1.设计思想:数据处理的通用性,参数化程序设计 2. 适用范围:普通数据类型、自定义数据类型、类 3. 注意事项:成员函数是模板函数、代码要通用 返返 回回 面向对象编程技术第四章 Class A public: int a,b,c; private: int x,y,z; 返返 回回 A a1,a2,a3; 面向对象编程技术第四章 Class A public: int a,b,c; private: int x,y,z; 公共接口公共接口 内部数据,隐私内部数据,隐私 返返 回回 面向对象编程技术第四章 1.构造函数与析构函数的功能? 2.默认构造函数:系统可以产生缺省的构造函数与析构函数 3.构造函数可以重载,析构函数可以重载吗? 返返 回回 面向对象编程技术第四章 为什么需要拷贝构造函数?为什么需要拷贝构造函数? 格式:格式:类名(类名 class inner public: int b; inner()coutrun the inner constructorendl; void show()coutthe data of inner is: bendl; inn; outer()coutrun the outer constructorendl; void
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年早期硬科技项目合理亏损尽职免责制度落地指南
- 2026年可降解医用植入材料首批次验证操作手册
- 2026年用产品经理思维重构简历数据化包装技巧
- 2026年海洋中药海木方汤抗肿瘤机制临床应用实务
- 2026年南京海事局印发全国首部水上低空物流作业指引解读
- 医患沟通中的边界与尺度课件
- 2026年海尔HIVA海娃机器人工程师遥控完成洗地烹饪家务
- 2026年生物育种产业化推进下种业行业规模扩容测算报告
- 2026年全球及中国数据定价市场发展趋势与政策洞察报告
- 2026中共常州市委党校招聘教师2人备考题库(长期)带答案详解(夺分金卷)
- 医疗设备采购与招标流程
- 雨课堂学堂在线学堂云中华戏曲艺术鉴赏华侨单元测试考核答案
- PET吹瓶工艺操作指导书
- DB4419∕T 30-2025 高层、超高层民用建筑匹配消防救援能力建设规范
- 2025中国高等教育学会秘书处招聘6人备考题库(非事业编制北京)附答案
- DB61∕T 2103-2025 砖瓦用页岩矿资源储量核实技术规范
- 电网仓管员面试常见问题及应对策略
- 2025年电饭煲煮粥功能及口感需求调研汇报
- 渣土运输车辆安全协议
- 薄型防火涂料施工方法方案
- 2025中证信息技术服务有限责任公司招聘16人考前自测高频考点模拟试题附答案
评论
0/150
提交评论