面向对象编程技术第四章课件.ppt
《面向对象编程技术第四章课件.ppt》由会员分享,可在线阅读,更多相关《面向对象编程技术第四章课件.ppt(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章 类与对象1类和对象类和对象2构造函数与析构函数构造函数与析构函数3面向对象的基本特点面向对象的基本特点4类的组合类的组合5前向引用说明前向引用说明6类模板类模板/以后介绍以后介绍7面向对象标记面向对象标记8要点回顾要点回顾认识事物的认识事物的规律:由简规律:由简单到复杂单到复杂!顺顺序体现第三版序体现第三版本改进了本改进了一、类与对象1.类概述类概述1.类是具有相同属性和行为的一组对象的抽象集合,为该类的全部对象提供了统一的抽象描述,包括属性和行为两个主要部分。2.利用类可以实现数据的封装、隐藏、继承与派生。3.利用类易于编写大型复杂程序,其模块化程度比C中采用函数更高。慢慢体会慢慢体
2、会类是一种用户自定义类型,声明形式:class 类名 public:公有成员(外部接口)private:私有成员 protected:保护型成员2.类的定义:类的定义:时钟类的成员(数据成员与函数成员声明)class Clockprivate:int Hour,Minute,Second;public:void SetTime(int NewH,int NewM,int NewS);void ShowTime();成员函数成员函数数据成员数据成员void Clock:SetTime(int NewH,int NewM,int NewS)Hour=NewH;Minute=NewM;Second=
3、NewS;void Clock:ShowTime()coutHour:Minute:Second;时钟类的函数成员(定义部分)说明说明:1.关键字public后面声明公有类型成员 它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数2.关键字private后面声明私有类型成员 允许本类中的函数访问,类外部的任何函数都不能访问。紧跟在类名称的后面声明私有成员,关键字private可省略(不提倡)说明:3.保护类型与private类似,其差别表现在继承与派生时对派生类的影响不同,在第七章介绍。下页下页 例子例子class circle public:circle:circle(int r
4、)radius=r;int area()return(int)3.14*radius*radius;void circle_prt()coutthe private radius is:radiusendl;private:int radius;void main()circle circle1(1),circle2(3);coutthe private radius is:circle1.radius成员名”方式访问 public 属性的成员返返 回回二、构造函数与析构函数构造函数名与类名相同构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。在对象创建时
5、由系统自动调用。如果程序中未声明,则系统自动产生出一个缺省形式的构造函数1.构造函数构造函数定义及使用定义及使用构造函数举例class circle public:int radius;int 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;定义部分定义部分1.构造函数
6、与类同名2.不能指定返回值类型不能指定返回值类型3.可以是重载函数4.可以是内联函数5.如无自定义构造函数,C+系统自动产生空的的构造函数6.如构造函数带有参数,则在定义对象时必须带上相同类型的实参7.通过定义类的实例对象,只分配数据成员空间,共享类的共享类的代码空间代码空间注意:注意:析构函数名:类名完成对象被删除前的一些清理工作。在对象的生存期结束的时刻系统自动调用它,然后再释放此对象所属的空间。如果程序中未声明析构函数,编译器将自动产生一个缺省的析构函数。析构函数不带任何参数2.析构函数析构函数定义及使用定义及使用请关注后请关注后面的内容!面的内容!析构函数举例class Point p
7、ublic:Point(int xx,int yy);Point();/.其它函数原形 private:int X,int Y;包含:delete A delete B 注意1.命名方式2.一般类中设计有动态对象,则要设计析构函数3.析构函数不带任何参数课堂练习课堂练习(5分钟分钟):1.定义一个表述圆的类(数据成员和函数成员),并提供相应的方法2.定义一个表述人的类,(数据成员和函数成员),并提供相应的方法体会面向对象的编程的特点3.内联成员函数为了提高运行时的效率,对于较简单的函数可以声明为内联形式。内联函数体中不要有复杂结构(如循环语句和switch语句)。类中声明内联成员函数的方式:将
8、函数体放在类的声明中。使用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 Init(int initX,int initY);int GetX(););int GetY(););private:int
9、 X,Y;inline void Point:Init(int initX,int initY)X=initX;Y=initY;inline int Point:GetX()return X;隐式:隐式:显式:显式:当构造函数的参数为自身类对象的引用参数为自身类对象的引用时,这个构造函数称为拷贝构造函数.拷贝构造函数的功能是用一个已有对象初始化一个正在建立的同类对象.4.拷贝构造函数已存在对象已存在对象新对象新对象克隆克隆拷贝构造函数在以下三种情况下会被调用:拷贝构造函数在以下三种情况下会被调用:当用类的一个对象去初始化该类的另一个对象时;如果函数的形参是类对象类对象,调用函数进行形参和实参结
10、合时;如果函数的返回值返回值是类对象,函数调用完成返回完成返回时。何时需要何时需要它?它?定义:class 类名 public:类名(形参);/构造函数 类名(类名类名&对象名对象名);/拷贝构造函数 .;类名:类名(类名&对象名)/拷贝构造函数的实现 函数体 Point a=a1;/拷贝构造函数 等价于等价于Point a(a1);/可以改成这种形式 Point:Point(Point&p)X=p.X;Y=p.Y;cout拷贝构造函数被调用endl;class Point public:Point(int xx=0,int yy=0)X=xx;Y=yy;Point(Point&p);int
11、GetX()return X;int GetY()return Y;private:int X,Y;请看请看 下页下页当用类的一个对象去初始化该类的另一个对象时系统自动调用它实现拷贝赋值。void main(void)Point A(1,2);Point B(A);/拷贝构造函数被调用拷贝构造函数被调用 coutB.GetX()endl;情形之一情形之一 若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数。例如:void fun1(Point p)coutp.GetX()endl;void main()Point A(1,2);fun1(A);/调用拷贝构造函数调用拷贝
12、构造函数 情形之二情形之二 当函数的返回值是类对象时,系统自动调用拷贝构造函数。例如:Point fun2()Point A(1,2);return A;/调用拷贝构造函数调用拷贝构造函数void main()Point B;B=fun2();情形之三情形之三要看明白书上要看明白书上的例子的例子返返 回回三、面向对象的基本特点抽象抽象是对具体对象(问题)进行概括,抽出这一类对象的公共性质并加以描述的过程。数据抽象:描述某类对象的属性或状态(对象相互区别的物理量)。代码抽象:描述某类对象的共有的行为特征或具有的功能。之抽象之抽象?如何实现抽象如何实现抽象通过类的定义。三、面向对象的设计思想层层分
13、类层层分类,使概念逐渐细化,即具体化。例如,生物分为动物和植物,动物又分为脊椎动物和无脊椎动物,脊椎动物包括哺乳动物,哺乳动物又分为猫、狗,等等之分类之分类回回 顾顾三、面向对象的设计思想将抽象出的数据成员、代码成员相结合,将它们视为一个整体。1.增强安全性和简化编程,不必了解具体的实现细节,只需要通过外部接口,以特定的访问权限,来使用类的成员。2.实现封装:类定义中的 之封装之封装在设计者允许在设计者允许的权限下的权限下三、面向对象的设计思想子类与父类1.子类继承父类所有的属性、方法,并可定义自己的特有属性与方法2.提高软件开发效率,为软件复用提供强有力的支持3.多种多种继承方式:公有、私有
14、、保护;单继承、多继承之继承之继承三、面向对象的设计思想之多态之多态定义:指类具有相似功能的不同函数使用同一个名称 来实现如:1.运算符重载 2.函数重载 3.虚函数 慢慢领会慢慢领会插入语插入语学习复杂、严密的C+语法体系C+既考虑设计理念的先进性,又兼顾程序执行的效率!理解、领会、运用其中的优秀的面向对象程序设计、分析思想!返返 回回是否感觉有是否感觉有点烦!点烦!四、类的组合类中的成员数据是另一个类的对象类的对象可以在已有的抽象的基础上实现更复杂的抽象注意是对象注意是对象例例:class Point private:float x,y;/点的坐标 public:Point(float h
15、,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.如何设计组合类的构造函数?如何设计组合类的构造函数?原则:原则:不仅要负责对本类中的基本类型成员数据赋初值,也要对对象成员初始化。声明形式:声明形式:类名:类名(形参,本类成员
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 编程 技术 第四 课件
限制150内