章类和对象说课讲解

上传人:yulij****0329 文档编号:138875103 上传时间:2020-07-18 格式:PPT 页数:58 大小:681KB
返回 下载 相关 举报
章类和对象说课讲解_第1页
第1页 / 共58页
章类和对象说课讲解_第2页
第2页 / 共58页
章类和对象说课讲解_第3页
第3页 / 共58页
章类和对象说课讲解_第4页
第4页 / 共58页
章类和对象说课讲解_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《章类和对象说课讲解》由会员分享,可在线阅读,更多相关《章类和对象说课讲解(58页珍藏版)》请在金锄头文库上搜索。

1、第4章类和对象,4.1类和对象 4.2构造函数和析构函数 4.3类的组合 4.4UML图形标识 4.5 结构体和联合体 4.6 小结,一个简单的日期类,数据抽象: 行为抽象: 年 设置年月日 月 判断是否为闰年 日 显示时间 用C语言可以将年月日描述为: 日期类(TDate) 数据抽象: int Year,Month,day; 代码抽象: SetDate();IsleapYear();Print();,4.1类和对象,4.1.1 什么是类 4.1.2 类的定义格式 4.1.3 类成员的访问控制 4.1.4 类的数据成员 4.1.5 类的成员函数 4.1.6 定义类时的注意事项 4.1.7 对象

2、,4.1.1什么是类,类是一种复杂数据类型; 类是将不同类型的数据和与这些数据相关的操作封装在一起的集合体;类中的数据具有隐藏性; 类是对某一类对象的抽象,对象是某一种类的实例; C+提供了类的继承机制; 类是面向对象程序设计的核心; 类是C+实现抽象数据类型的工具;,4.1.2类的定义格式(续1),class Date /日期类的定义 public: void SetDate(int y,int m,int d); int IsLeapYear(); void PrintDate(); private: int year,month,day; ; /时钟类的定义 class Clock pu

3、blic: void SetTime(int NewH,int NewM,int NewS); void ShowTime(); private: int Hour,Minute,Second; ;,4.1.3类成员的访问控制,访问权限修饰符: 公有的(public) /公有部分提供一些操作(即成员函数),是提供给用户的接口功能; 私有的(private) /私有部分提供一些数据成员,通常用来描述该类中的对象的属性;缺省访问权限 保护的(protected) 访问权限修饰符出现的先后次序无关,并且允许多次出现;,4.1.3类成员的访问控制(续1),通过private、protected、pub

4、lic来指定成员的不同访问权限,class,private: protected: public:,4.1.4 类的数据成员,一、数据成员 数据成员可以放在公有部分,称为公有数据成员,也可以放在私有或保护部分,称为私有数据成员或保护数据成员。 二、数据成员在类体中的定义格式为: 数据成员; (1)数据成员只有,无说明。 (2)在类体中不允许对所定义的数据成员进行初始化。 class Clock public: void SetTime(int NewH,int NewM,int NewS); private: int Hour=0,Minute=0,Second=0;/出错; (3)数据成员的

5、类型可以为任意类型(基本数据类型、复杂数据类型、已定义类的对象等)。,4.1.5类的成员函数,类的成员函数的原型声明必须在类主体中,函数的实现可以在类主体中(内联函数),也可以在类主体外(外联函数)。 1.成员函数的实现形式: 返回值类型 类名:成员函数名(参数表) 函数体 在类的成员函数体内,可以直接访问该类的所有数据成员,包括:public、protected、private。 类的成员函数也可带默认形参值,4.1.5类的成员函数(续1),class TDate public: void SetDate(int y,int m,int d); int IsLeapYear(); void

6、Print(); private: int year,month,day; ; void TDate:SetDate(int y,int m,int d) y=year; / m=month; d=day; ,作用域运算符,例4-1 简单的日期程序(tdate.h),/成员函数声明,/成员函数定义,year=y; month=m; day=d;,4.1.5类的成员函数(续2),int TDate:IsLeapYear()/成员函数定义 return (year%4=0 ,作用域运算符:,作用:标识某个成员属于哪个类;,格式::(),4.1.5类的成员函数(续3),2.带默认值的成员函数 voi

7、d TDate:SetDate(int y=2009,int m=2,int d=1) year=y; month=m; day=d; 3.内联成员函数显式声明与隐式声明 class TDate public: void SetDate(int y,int m,int d); int IsLeapYear(); void Print() /内联成员函数隐式定义 coutyear.month.dayendl; private: int year,month,day; ;,3.内联成员函数和外联成员函数,内联函数:定义在类体内的成员函数,或定义在类体外,但使用inline关键字进行说明的成员函数;

8、 外联函数:说明在类体内,定义在类体外的成员函数; 例4.2:分析下列程序的输出结果。 #include using namespace std; class A public: A(int x,int y)X=x;Y=y; int a() return X; int b() return Y; int c(); int d(); private: int X,Y; ;,inline int A:c() return a()+b(); inline int A:d() return c(); void main() A m(3,5); int i=m.d(); coutd() return:”

9、 iendl; ,输出: d() return:8,4.1.6定义类时的注意事项,1.在类体中不允许对所定义的数据成员进行初始化;,class TDate public: private: int year(2009),month(2),day(5); ;,错误,2.类中的数据成员的类型可以是任意的;,包含整型、浮点型、字符型、数组、指针和引用等;,另一个类的对象,可以作该类的成员(类的组合);,自身类的对象不可以作该类的成员;,4.1.6定义类时的注意事项(续1),class N; class M public: . private: N *n; ; class N public: void

10、 f(M m); ;,/前向引用声明,自身类的指针或引用,可以作该类的成员(递归类);,当另一个类的对象作为该类的成员时,如果另一个类的定义在后,需要提前说明,称为前向引用声明;,一般在类体内先说明用户感兴趣的公有成员,再说明私有成员;,习惯将类定义的说明部分或者整个定义部分(包含实现部分)放到一个头文件中;,/n是N类的对象,/m是M类的对象,4.1.7对象,.运算符:表示对象的成员,例如: date1.year,date1.month,date1.day; date1.SetDate(1998,4,9);,4.1.7对象(续1),-运算符与.运算符的区别,-表示指向对象的指针的成员 .表示

11、一般对象的成员;,两种等价表示,-,(*).,3、引用对象,与一般对象相同;,2、指针对象,数据成员:-,成员函数:-(),-运算符:表示指针对象的成员,例如: Pdate-year,Pdate-SetDate(2009,2,9);,/tdate.h 类定义部分_头文件 class TDate public: void SetDate(int y,int m,int d); int IsLeapYear(); void Print() coutyear.month.” day endl; private: int year,month,day; ; void TDate:SetDate(int

12、 y,int m,int d) year = y; month = m; day = d; int TDate:IsLeapYear() return (year%4=0 #include tdate.h void main() TDate date1,date2; date1.SetDate(2009,2,4); date2.SetDate(2010,9,5); int leap=date1.IsLeapYear(); coutleapendl; date1.Print(); date2.Print(); ,输出 0 2009.2.4 2010.9.5,例4.3:分析下列程序的输出结果。,4

13、.2构造函数和析构函数,构造函数与析构函数是功能特殊的成员函数; 构造函数:在创建对象时,使用特定的值来将对象初始化; 析构函数:用来释放对象,在对象删除前做一些清理工作; 4.2.1 构造函数和析构函数 4.2.2 构造和析构函数的调用顺序 4.2.3 缺省构造函数和缺省析构函数 4.2.4 拷贝构造函数 4.2.5 设置参数的缺省值,4.2.1构造函数和析构函数,例4-4 构造函数与析构函数(tdate1.h),class TDate1 public: TDate1(int y,int m,int d);/构造函数 TDate1(); /析构函数 void Print() coutyear

14、.month.dayendl; private: int year, month, day; ; TDate1:TDate1(int y,int m,int d)/构造函数 year=y; month=m; day=d; coutConstructor called.endl; TDate1:TDate1() /析构函数的实现 coutDestructor called.endl;,4.2.1构造函数和析构函数(续4),#include using namespace std; #include tdate1.h void main( ) TDate1 today(2010,9,5),tomo

15、rrow(2010,9,6); coutToday is ; today.Print(); coutTomorrow is ; tomorrow.Print(); ,输出: Constructor called. Constructor called. Today is 2010.9.5 Tomorrow is 2010.9.6 Destructor called. Destructor called.,例4.5:分析下列程序的输出结果。,4.2.1构造函数和析构函数(续2),2、构造函数的特点,3、析构函数的特点,构造函数是公有成员函数,函数在类体中声明, 定义可写在类体内,也可写在类体外;,构造函数的名字与类名相同;,构造函数不指定返回类型,它有隐含的返回值,该值由系统内部使用;,析构函数也是公有成员函数,函数在类体中声明, 定义可写在类体内,也可写在类体外;,析构函数的名字在类名前加字符;,析构函数不指定返回类型;,4.2.1构造函数和析构函数(续3),2、构造函数的特点,3、析构函数的特点,构造函数可以有一个或多个参数;,析构函数没有参数;,构造函数可以重载;,在程序中不直接使用构造函数,在创建对象时系统自动调用构造函数;,一个类中只能定义一个析构函数;,析构函数在对象存在的函数体结束时或使用delete运算符释放new运算创建的对象时被自动调用; 析构函数的调用

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

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

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