《c++程序设计教程-第2版》教学素材ppt讲稿(教学课件)第10章-类和对象

上传人:F****n 文档编号:106837385 上传时间:2019-10-16 格式:PPT 页数:55 大小:297.50KB
返回 下载 相关 举报
《c++程序设计教程-第2版》教学素材ppt讲稿(教学课件)第10章-类和对象_第1页
第1页 / 共55页
《c++程序设计教程-第2版》教学素材ppt讲稿(教学课件)第10章-类和对象_第2页
第2页 / 共55页
《c++程序设计教程-第2版》教学素材ppt讲稿(教学课件)第10章-类和对象_第3页
第3页 / 共55页
《c++程序设计教程-第2版》教学素材ppt讲稿(教学课件)第10章-类和对象_第4页
第4页 / 共55页
《c++程序设计教程-第2版》教学素材ppt讲稿(教学课件)第10章-类和对象_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《《c++程序设计教程-第2版》教学素材ppt讲稿(教学课件)第10章-类和对象》由会员分享,可在线阅读,更多相关《《c++程序设计教程-第2版》教学素材ppt讲稿(教学课件)第10章-类和对象(55页珍藏版)》请在金锄头文库上搜索。

1、第 10 章 类和对象,Class and Object,10.1 类和对象的定义 10.1.1 从结构体到类,以前,定义结构体类型,描述一个对象 : struct SPerson /只有数据成员 char name20; /姓名 char sex; /性别 int age; /年龄 ;,我们把一个对象可能具有的动作,加入到对象的描述中,就形成了类。,10.1.2 类和对象的定义形式,class private: /私有成员,缺省存取权限 public: /公有成员 protected: /保护成员 ;,私有成员:只允许类内成员函数存取它 公有成员:允许类内和类外函数存取它 保护成员:允许类内

2、和其派生类函数存取它,例10.1 定义描述一个人的类 Person 源程序文件名为person.h,void GetName( char *n ) / 函数 strcpy(n, Name); char GetSex( ) / 函数 return Sex; int GetAge( ) / 函数 return Age; ; / 注意:类定义结束处的分号不能少,对象的定义: ;,如:Person a, b ; / 定义a、b两个对象,可以定义对象的指针和对象数组: 如:Person *pa, *pb, x10; / pa和pb是两个Person类型指针, x是对象数组 pa= 那么能否这样访问对象a

3、的成员呢? a.Name, a.Sex, a.Age 回答是:不能!,类是一种类型,该类型的变量称为对象(实例),10.1.3 对象成员的访问,表 10-1 类成员的访问特性,Person a, *pa= /类外访问如下, a.name pa-name a.SetData() pa- SetData() ,返回例10.1,10.1.4 成员函数的定义 例10.1,类体内定义成员函数。例10.2 ,类体外定义成员函数。,例10.2 定义Person类,在类体外定义成员函数, #include 程序文件名为person.h #include class Person char Name20; /姓

4、名 /注意缺省 private char Sex; /性别 int Age; /年龄 public: void SetData(char , char , int ); void GetName(char *); char GetSex( ); int GetAge( ); ;,/ 在类体外定义成员函数 void Person:SetData(char n , char s, int a) strcpy(Name, n); Sex=s; Age=a; void Person:GetName( char *n ) strcpy(n, Name); ,续,char Person:GetSex( )

5、 return Sex; int Person:GetAge( ) return Age; ,例10.3 测试Person类 #include “person.h“ /包含例10.1或例10.2中的头文件 void main( ) Person a, *pa; char name20; a.SetData(“Cheng“, F, 20); a.GetName(name); cout “Name: “ name endl; cout “ Sex: “ a.GetSex( ) endl; cout “ Age: “ a.GetAge( ) endl;,/ Person a, *pa; pa= ,例

6、10.4 定义并测试长方形类Crect, 长方形是由左上角坐标(left, top) 和右下角坐标(right, bottom)组成。,见 “第10章 类和对象(例子).doc”,10.1.5 对象的存储空间,定义对象后,对象数据成员占用不同的存储空间。,Person a, b, *pa=,该类的所有对象的同一成员函数, 共享同一代码空间。,10.1.6 定义类和对象的有关说明,1类中数据成员的类型可以是任意的, 但自身类的对象不可以作为成员。 class Obj int x; double y; ;,class Person char Name20; char Sex; int Age; O

7、bj obj1, obj2; / 可以 Person a, b; / 不可以 Person *pa; / 可以 ;,10.1.6 定义类和对象的有关说明(续),class B; / B类说明 class A / A类的定义 private: B *pb; / B类对象的指针pb是A类的数据成员 public: ; class B / B类的定义 ;,2若类的使用在前,定义在后,则需引用性说明。,10.1.6 定义类和对象的有关说明(续),(1)类的定义完成后,定义对象 class A / A类的定义 int x; float y; public: ; A a1, a2, a3; /定义A类对象

8、,3定义对象的三种方法 :,10.1.6 定义类和对象的有关说明(续),(2)在定义类的同时定义对象 class A / A类的定义 int x; float y; public: a1, a2, a3; /定义A类对象,10.1.6 定义类和对象的有关说明(续),缺点:只能定义一次该类对象, 如果以后需要再次定义该类对象就不可以了。,(3)定义无类名的对象 class /无类名 int x; float y; public: a1, a2, a3; /定义该类对象,10.1.6 定义类和对象的有关说明(续),4结构体与类的区别: 结构体成员缺省的存取权限是公有的, 而类中成员缺省的存取权限是

9、私有的。 结构体是类的特例。,10.2 初始化对象、撤消对象,“初始化是指:定义对象的同时为其赋初值”。 对结构体类型的对象,可以这样初始化:,struct SPerson /定义结构体类型 char name20; /姓名 char sex; /性别 int age; /年龄 ; SPerson p1= “Cheng”, F, 20 ; /初始化 ,而对“类”类型的对象的私有成员,不可以这样初始化。,class Person /定义“类”类型 char name20; /姓名 char sex; /性别 int age; /年龄 ; Person p= “Cheng”, F, 20 ; /初

10、始化 ,原因: 结构体默认的成员访问特性(存取权限)是公有的, 而类的默认的成员访问特性(存取权限)是私有的。,对“类”类型的对象的公有成员,可以这样初始化。,class Person /定义“类”类型 public: char name20; /姓名 char sex; /性别 int age; /年龄 ; Person p= “Cheng”, F, 20 ; /初始化 ,可以为“类”定义构造函数用于初始化对象的数据成员, 同时还可以定义析构函数用于撤销该对象时做清理工作。,10.2.1 构造函数和析构函数 1.构造函数,在类体内定义构造函数的一般格式是: ClassName() / Cla

11、ssName是类名, /在此处作为构造函数名 在类体外定义构造函数的一般格式是: ClassName : ClassName() ,构造函数的调用时机:当产生新对象时,自动调用。,例10.5 见 “第10章 类和对象(例子).doc”,(1) 构造函数是成员函数,函数体可写在类体内, 也可写在类体外。 (2) 构造函数是一种特殊的函数,其函数名与类名相同, 且不给出返回值类型。 (3) 构造函数可以重载, 即可以定义多个参数个数以及参数类型不同的 构造函数。 (4) 一般将构造函数定义为公有成员函数。 (5) 在创建对象时,系统自动调用构造函数。,构造函数的特点如下:,(6) 不可以通过对象名

12、调用构造函数 例如:d1.Date(2009) 是非法的。 (7) 可以直接通过构造函数名调用构造函数创建对象。 例如:d1 = Date(2009); 等号右边创建了一个对象(日期值是2009.5.1), 并将它赋值给 d1。 又如: Date d4 = Date( ), Date(2010), Date(2010, 10), Date(2010, 10, 6) ;,构造函数的特点如下(续):,2.析构函数,在类体内定义析构函数的一般格式是: ClassName( ) / ClassName是类名 / 析构函数名为ClassName 在类体外定义析构函数的一般格式是: ClassName :

13、 ClassName( ) ,析构函数的调用时机:当撤销对象时,自动调用。,例10.6见 “第10章 类和对象(例子).doc”,析构函数的特点如下:,(1) 析构函数是成员函数,可在类体内定义, 也可在类体外定义。 (2) 一般地,将析构函数定义成公有成员函数。 (3) 析构函数也是特殊函数,该函数的名字是类名前加 , 用来与构造函数区分,该函数不指定返回值类型, 没有参数。 (4) 一个类只能定义一个析构函数, 即析构函数不允许重载。,析构函数的特点如下(续):,(5)析构函数可以被显式调用,也可以由系统自动调用。 在下面两种情况下,析构函数会被自动调用: 当对象是系统自动创建的,则在对象

14、的作用域结束时,系统自动调用析构函数。 当一个对象是使用new运算符被动态创建的,在使用delete运算符释放它时,delete将会自动调用析构函数。,3.调用构造函数和析构函数的时机(对象的生存周期),(1)全局对象(总是静态的) 程序main( )开始执行时, 调用构造函数,程序main( )结束时,调用析构函数。,不同存储类型的对象调用构造函数及析构函数 的时机不同。,(2)局部动态对象 当程序执行进入作用域, 在定义对象处系统自动创建对象,调用构造函数; 退出作用域时,系统在撤消对象前调用析构函数。,(3)局部静态对象 当程序执行首次到达定义对象处, 系统自动创建对象,调用构造函数;程

15、序结束时 (即main( )函数执行结束时), 系统在撤消对象前调用析构函数。,(4)动态申请的对象 使用 new 产生对象时, 系统自动调用构造函数;使用 delete 撤消对象时, 系统自动调用析构函数。,例10.7见 “第10章 类和对象(例子).doc”,此程序运行结果是: Constructor: 2008.4.4 /调用构造函数,产生d4对象 进入 main( )函数! Constructor: 2008.1.1 / 调用构造函数,产生d1对象 进入 fun( )函数! / 第1次进入fun( )函数,产生下述 d2, d3对象 Constructor: 2008.2.2 Constructor: 2008.3.3 退出 fun( )函数! / 退出fun( )函数,撤消d3

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 幼儿/小学教育 > 小学教育

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