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