(精品)4章_类和对象 (2)

上传人:沈*** 文档编号:247362228 上传时间:2024-10-18 格式:PPT 页数:58 大小:747KB
返回 下载 相关 举报
(精品)4章_类和对象 (2)_第1页
第1页 / 共58页
(精品)4章_类和对象 (2)_第2页
第2页 / 共58页
(精品)4章_类和对象 (2)_第3页
第3页 / 共58页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,4,章类和对象,4.1,类和对象,4.2,构造函数和析构函数,4.3,类的组合,4.4,U,ML,图形标识,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,对象,4.1.1,什么是类,类,是一种,复杂数据类型,;,类是将不同类型的,数据,和与这些数据相关的,操作,封装在一起的,集合体,;类中的数据具有,隐藏性,;,类是对某一类对象的,抽象,,对象是某一种类的,实例,;,C+,提供了类的,继承,机制,;,类是面向对象程序设计的核心;,类是,C+,实现抽象数据类型的工具,;,1,、类定义格式的构成,说明部分:,说明类中的成员,包含,数据成员,和,成员函数,的说明;,实现部分,:对,成员函数,的,定义,;,2,、类的一般定义格式,4.1.2,类的定义格式,class,public,:,protected:,private,:,;,说明部分,类头,类体,实现部分,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,public:,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,、,public,来指定成员的不同访问权限,class,private,:,protected,:,public,:,Date,类,public:private:,year,month,day,protected:,IsLeapYear(),SetDate(),Print(),日期类,Date,的描述,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,)数据成员的类型可以为,任意类型,(基本数据类型、复杂数据类型、已定义类的对象等)。,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 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&year%100!=0)|,(year%400=0),;,void,TDate:Print()/,成员函数定义,coutyear.month.”,dayendl;,作用域运算符,:,作用:标识某个成员属于哪个类;,格式:,:(),4.1.5,类的成员函数(续,3,),2.,带默认值的成员函数,void,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,关键字进行说明的成员函数,;,外联函数,:,说明,在,类体内,,,定义,在,类体外,的成员函数;,例,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:”,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 f(M m);,;,/,前向引用声明,自身类的指针或引用,,可以作该类的成员,(,递归类,),;,当另一个类的对象作为该类的成员时,如果另一个类的定义在后,需要,提前说明,称为,前向引用声明,;,一般在类体内先说明用户感兴趣的公有成员,再说明私有成员;,习惯将类定义的说明部分或者整个定义部分,(,包含实现部分,),放到一个头文件中;,/n,是,N,类的对象,/m,是,M,类的对象,4.1.7,对象,二、对象成员的表示方法,1,、一般对象,数据成员:,.,成员函数:,.(),.,运算符:表示对象的成员,例如:,date1.year,date1.month,date1.day;,date1.SetDate(1998,4,9);,例如:,TDate date1,date2,*Pdate,date31,一、对象的定义格式,:,;,4.1.7,对象(续,1,),-,运算符与,.,运算符的区别,-,表示指向对象的,指针,的成员,.,表示,一般对象,的成员;,两种等价表示,-,(*).,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 y,int m,int d),year=y;month=,m;day=d;,int,TDate:IsLeapYear(),return(year%4=0&year%100!=0)|(year%400=0),;,4.1.7,对象(续,2,),#include,using namespace std;,#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.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.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),tomorrow(2010,9,6);,coutToday is;,today.Print();,coutTomorrow
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!