《类和对象一》PPT课件.ppt
《《类和对象一》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《类和对象一》PPT课件.ppt(172页珍藏版)》请在三一办公上搜索。
1、类和对象-1,崔克彬,目录,5.1 类的定义 5.2 对象的定义 5.3 对象的初始化 5.4 成员函数的特性 5.5 静态成员 5.6 友元 5.7 类的作用域 5.8 局部类和嵌套类(自学)5.9 对象的生存周期,5.1 类的定义,类的定义:类是一种复杂的数据类型,它是将不同的类型的数据和与这些数据相关的操作封装在一起的集合体。类是面向对象程序设计的核心;类是一种用户自定义类型,是一种通过抽象数据类型的方法由用户构造的新型的数据类型;类的结构由其内部数据结构和相关的操作决定,并通过操作接口来描述,操作接口又被称为这类对象向其他对象提供的服务。,5.1 类的定义,类的定义格式:class p
2、ublic:private:;,5.1 类的定义,类的定义格式:说明:类的成员分为数据成员和成员函数类的成员的访问权限分三类:公有的(public)、私有的(private)和保护的(protected);public、private和protected被称为访问权限修饰符/访问控制修饰符,说明类或成员的访问权限:公有成员不仅可以被类的成员函数引用,而且可以在程序中被引用=公有成员提供了类的接口功能 私有成员只能被类的成员或友元函数所引用,在程序中不可访问,5.1 类的定义,类的定义格式:说明:类的成员函数可以在类体内定义,也可以在类体外定义。当成员函数在类体外定义时,需定义为以下格式::()
3、:作用域运算符,用来标识该成员函数属于哪个类。,5.1 类的定义,例5.1:定义一个关于日期的类,类的说明部分:class TDate public:void SetDate(int y,int m,int d);int IsLeapYear();void Print();private:int year,month,day;,类中定义了6个类成员:3个成员函数,3个数据成员,;,5.1 类的定义,例5.1:定义一个关于日期的类,成员函数如果定义在类体外,需要在函数头前加上函数所属的类的标识符,使用作用域运算符:,类的实现部分,类的公有成员可访问类的私有成员,5.1 类的定义,例5.1:定义一
4、个关于日期的类,成员函数如果定义在类体内,则与一般函数的定义一样,类的另一种实现方式,;,5.1 类的定义,注意事项:在类体内不允许对所定义的数据成员进行初始化操作,类的数据成员的类型可以是普通的数据类型:整型、浮点型、字符型、数组、指针和引用等,也可以为对象另一个类的对象可以作为该类的成员,该类的指针或引用也可以作为该类的成员,但该类自身的对象不可以作为该类的成员,5.1 类的定义,注意事项:,5.1 类的定义,注意事项:,5.1 类的定义,注意事项:通常将对于类的说明部分或整个类的定义部分放到一个单独的头文件中:例如,可将之前定义的TDate类放到名为tdate.h的头文件中,目录,5.1
5、 类的定义 5.2 对象的定义 5.3 对象的初始化 5.4 成员函数的特性 5.5 静态成员 5.6 友元 5.7 类的作用域 5.8 局部类和嵌套类(自学)5.9 对象的生存周期,5.2 对象的定义,对象是类的实例,类是某一类对象的抽象 对象属于某个已知类,定义对象之前要先定义该对象的类,例:TDate date1,date2,*Pdate,date31;,对象的定义格式:,5.2 对象的定义,对象成员(数据成员/成员函数)的表示方法:一般对象:()例:TDate date1;date1.year,date1.month,date1.day date1.SetDate(y,m,d),5.2
6、 对象的定义,对象成员(数据成员/成员函数)的表示方法:指向对象的指针:方式:()例:TDate Pdate;Pdateyear,Pdatemonth,Pdateday PdateSetDate(y,m,d)方式:()()()例:TDate*Pdate;(Pdate)year,(Pdate)month,(Pdate)day(Pdate)SetDate(y,m,d),5.2 对象的定义,对象成员(数据成员/成员函数)的表示方法:对象引用:()例:TDate date1,rdate.year,rdate.month,rdate.day rdate.SetDate(y,m,d)说明:同一个类创建的不
7、同对象,其数据结构相同系统为其分配相同长度的内存单元。但其内容有可能不同;同一个类创建的不同对象,共享类中的成员函数=系统只为所定义的对象提供数据成员的内存空间,5.2 对象的定义,例5.1:分析程序的输出结果,5.2 对象的定义,例5.1:分析程序的输出结果,/系统只为所定义的对象提供数据成员的内存空间,5.2 对象的定义,例5.1:分析程序的输出结果,/系统只为所定义的对象提供数据成员的内存空间,/对象调用类的成员函数,1996,5,4,5.2 对象的定义,例5.1:分析程序的输出结果,/系统只为所定义的对象提供数据成员的内存空间,/对象调用类的成员函数,1996,5,4,1998,4,9
8、,5.2 对象的定义,例5.1:分析程序的输出结果,/系统只为所定义的对象提供数据成员的内存空间,/对象调用类的成员函数,1996,5,4,1998,4,9,int leap,date1.year,1,5.2 对象的定义,例5.1:分析程序的输出结果,/系统只为所定义的对象提供数据成员的内存空间,/对象调用类的成员函数,1996,5,4,1998,4,9,int leap,1,5.2 对象的定义,例5.1:分析程序的输出结果,/系统只为所定义的对象提供数据成员的内存空间,/对象调用类的成员函数,1996,5,4,1998,4,9,int leap,1,5.2 对象的定义,例5.1:分析程序的输
9、出结果,/系统只为所定义的对象提供数据成员的内存空间,/对象调用类的成员函数,结论?,1、在程序中,可以访问类的公有成员2、类的成员函数只能通过该类定义的对象来调用,5.2 对象的定义,例5.1:分析程序的输出结果,/系统只为所定义的对象提供数据成员的内存空间,/对象调用类的成员函数,问题?,5.2 对象的定义,例5.1:分析程序的输出结果,/系统只为所定义的对象提供数据成员的内存空间,/对象调用类的成员函数,结论?,类的私有成员不能被程序所访问,只能被类的成员函数所访问,5.2 对象的定义,例5.2:分析程序的输出结果,5.2 对象的定义,例5.2:分析程序的输出结果,数据成员,5.2 对象
10、的定义,例5.2:分析程序的输出结果,3,5,5.2 对象的定义,例5.2:分析程序的输出结果,3,5,8,10,5.2 对象的定义,例5.2:分析程序的输出结果,3,5,8,10,5,6,5.2 对象的定义,例5.2:分析程序的输出结果,3,5,8,10,5,6,9,8,5.2 对象的定义,例5.2:分析程序的输出结果,3,5,8,10,5,6,9,8,5.2 对象的定义,例5.2:分析程序的输出结果,3,5,8,10,5,6,9,8,目录,5.1 类的定义 5.2 对象的定义 5.3 对象的初始化 5.4 成员函数的特性 5.5 静态成员 5.6 友元 5.7 类的作用域 5.8 局部类和
11、嵌套类(自学)5.9 对象的生存周期,5.3 对象的初始化,5.3.1 构造函数和析构函数 5.3.2 缺省构造函数和缺省析构函数 5.3.3 拷贝初始化构造函数,5.3 对象的初始化,回顾:TDate类与TPoint类初始化对象的方式,5.3 对象的初始化,回顾:TDate类与TPoint类初始化对象的方式,5.3 对象的初始化,总结:对对象进行初始化,实际就是对对象的数据成员(属性)进行初始化操作;类中都定义了一类函数实现对对象的初始化操作即为对象的数据成员赋初始值(例如TDate:SetDate(int y,int m,int d)函数,TPoint:SetPoint(int x,int
12、 y)函数)。,类中是否有一类函数专门实现对对象的初始化?这类函数是否有特定的语法规则?,5.3 对象的初始化,在创建对象时对对象进行初始化操作的类的成员函数称为构造函数 在对象删除时对对象进行释放操作的类的成员函数称为析构函数,构造函数和析构函数,以日期类TDate类为例,构造该类的构造函数和析构函数,5.3 对象的初始化,构造函数的特点:构造函数是类的成员函数,可以定义在类体内,也可以定义在类体外;构造函数的函数名必须与类名相同;构造函数的返回值类型不指定说明,具有隐含的函数返回值,该值由系统内部使用;,TDate类的构造函数:函数名为TDate,TDate类的构造函数:TDate函数不指
13、明返回值类型,构造函数和析构函数,5.3 对象的初始化,构造函数的特点:构造函数可以有一个参数,也可以有多个参数;,构造函数的作用是对类的数据成员进行初始化操作,所以定义TDate类的构造函数如下:class TDate public:TDate(int y,int m,int d)year=y;month=m;day=d;private:int year,month,day;,构造函数和析构函数,5.3 对象的初始化,构造函数的特点:构造函数可以重载,即同一个类中可以定义多个参数不同的构造函数;程序中不能直接调用构造函数,在创建对象时系统自动调用构造函数。,void main()TDate
14、date1(2000,3,10);,TDate(int y,int m,int d)year=y;month=m;day=d;,/对对象进行初始化操作,系统自动调用类的构造函数,构造函数和析构函数,5.3 对象的初始化,析构函数的特点:析构函数是类的成员函数,可以定义在类体内,也可以定义在类体外;析构函数的函数名与类名相同,前面加字符用来与构造函数进行区别;析构函数不指定函数的返回值类型,也没有参数;析构函数不可以重载,即一个类中只能定义一个析构函数;,构造函数和析构函数,TDate类的析构函数:函数名为TDate,TDate类的析构函数:定义为TDate();,5.3 对象的初始化,析构函数
15、的特点:析构函数可以被程序调用,也可以由系统调用自动。在下面两种情况下,析构函数会被系统自动调用:如果一个对象被定义在函数体内,则当函数结束时,该对象的析构函数会被自动调用;如果一个对象是用new运算符被动态创建的,则在使用delete运算符释放它时,delete将会自动调用析构函数。,构造函数和析构函数,void main()TDate date1(2000,3,10);,系统自动调用类的析构函数,TDate(),5.3 对象的初始化,重新定义日期TDate类(保存在tdate.h中),5.3 对象的初始化,例5.3:分析程序的输出结果,系统自动调用类的构造函数,ty.year=1998,t
16、y.month=4,ty.day=9,输出:Constructor called.,输出:Constructor called.,5.3 对象的初始化,例5.3:分析程序的输出结果,系统自动调用类的构造函数,ty.year=1998,ty.month=4,ty.day=9,tm.year=1998,tm.month=4,tm.day=10,输出:Constructor called.Constructor called.,输出:Constructor called.Constructor called.,5.3 对象的初始化,例5.3:分析程序的输出结果,对象调用类的成员函数,ty.year=
17、1998,ty.month=4,ty.day=9,tm.year=1998,tm.month=4,tm.day=10,today.year,today.month,today.day,输出:Constructor called.Constructor called.,5.3 对象的初始化,例5.3:分析程序的输出结果,ty.year=1998,ty.month=4,ty.day=9,tm.year=1998,tm.month=4,tm.day=10,tomor.year,tomor.month,tomor.day,输出:Constructor called.Constructor called
18、.,输出:Constructor called.Constructor called.,5.3 对象的初始化,例5.3:分析程序的输出结果,ty.year=1998,ty.month=4,ty.day=9,tm.year=1998,tm.month=4,tm.day=10,输出:Constructor called.Constructor called.Destructor called.,系统自动调用类的析构函数,输出:Constructor called.Constructor called.,5.3 对象的初始化,例5.3:分析程序的输出结果,ty.year=1998,ty.month=
19、4,ty.day=9,tm.year=1998,tm.month=4,tm.day=10,输出:Constructor called.Constructor called.Destructor called.,系统自动调用类的析构函数,输出:Constructor called.Constructor called.Destructor called.Destructor called.,5.3 对象的初始化,5.3.1 构造函数和析构函数 5.3.2 缺省构造函数和缺省析构函数 5.3.3 拷贝初始化构造函数,5.3 对象的初始化,缺省构造函数:在定义类时没有定义任何构造函数,则编译器自动生
20、成一个不带参数的缺省构造函数::()缺省析构函数:在定义类时没有定义任何析构函数,则编译器自动生成一个不带参数的缺省析构函数::(),缺省构造函数和缺省析构函数,说明:用缺省构造函数对对象初始化时,对 象的所有数据成员都初始化为零或空,说明:缺省析构函数是空函数,5.3 对象的初始化,5.3.1 构造函数和析构函数 5.3.2 缺省构造函数和缺省析构函数 5.3.3 拷贝初始化构造函数,5.3 对象的初始化,当用一个已知的对象来初始化同类的另一个被创建的对象时,可调用拷贝初始化构造函数。格式::(const&),拷贝初始化构造函数,5.3 对象的初始化,当用一个已知的对象来初始化同类的另一个被
21、创建的对象时,可调用拷贝初始化构造函数。格式::(const&),拷贝初始化构造函数,例,定义TDate类的拷贝初始化构造函数:TDate(const TDate,拷贝初始化构造函数也是构造函数,它将一个已知对象的数据成员的值拷贝给创建的同类的另一个对象;该函数只有一个参数,是对同类进行赋值的对象的引用;每个类都需有一个拷贝初始化构造函数;如果类中没有说明,则编译系统自动生成一个缺省的拷贝初始化构造函数,作为该类的公有成员。,5.3 对象的初始化,例5.4:重新定义点类TPoint(存到tpoint1.h中),5.3 对象的初始化,例5.5:分析程序输出结果,5.3 对象的初始化,例5.5:分
22、析程序输出结果,输出:Copy_initialization Constructor called.,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialization Constructor called.,输出:Copy_initialization Constructor called.P2=5,7,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialization Constructor called.P2=5,7,输出:Copy_initialization Constructor called.P2=5,7Destructor
23、 called.,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialization Constructor called.P2=5,7Destructor called.,输出:Copy_initialization Constructor called.P2=5,7Destructor called.Destructor called.,5.3 对象的初始化,例5.5:分析程序输出结果,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialzation Constrctor called.,5.3 对象的初始化,例5.5:分析程序输出结
24、果,输出:Copy_initialzation Constrctor called.,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_in
25、itialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.Ok,5.3 对象的初始化,例5.5:分析程序输出结果,输出:Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_initialzation Constrctor called.,输出:Copy_initialzation Constrctor called.Copy_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 类和对象一 对象 PPT 课件

链接地址:https://www.31ppt.com/p-5565920.html