【教学课件】第五章类和对象(一).ppt
《【教学课件】第五章类和对象(一).ppt》由会员分享,可在线阅读,更多相关《【教学课件】第五章类和对象(一).ppt(73页珍藏版)》请在三一办公上搜索。
1、第五章 类和对象(一),5.1 类的定义5.2 对象的定义5.3 对象的初始化5.4 成员函数的特性5.5 静态成员5.6 友员5.7 类的作用域5.8 局部类和嵌套类5.9 对象的生存期,5.1 类的定义,类是面向对象程序设计的核心,是一种新的数据类型,一、什么是类,二、类的定义格式,三、定义类时注意事项,用户定义的抽象数据类型,是实现数据封装的工具;,一种复杂的数据类型,是不同类型的数据以及对这些数据的相关操作的封装体。,通过类的内部数据结构和相关操作确定一类对象的行为,行为通过操作接口来描述。,创建对象的模板;,一、什么是类,二、类的定义格式,注:如果所有成员函数都在类体内定义,实现部分
2、可省略!但 那是内联函数,1.类中成员的访问权限,公有的public:通常是一些成员函数(操作/方法),作为类的对外接口,可以被类体内外的程序访问;私有的private:通常是数据成员,描述对象的属性,用来隐藏的部分,类体外不可见,只有成员函数和友员函数可以访问;保护的protected:类内及派生类的成员函数可以访问。,访问权限修饰符private、public、protected 在类体内出现的先后次序无关,允许多次出现,缺省访问权限控制符:private,例:日期类 TDate,class TDate public:void SetDate(int y,int m,int d);int
3、IsLeapYear();void Print();private:int year,month,day;,类名,成员函数,数据成员,例:日期类 Tdate,void TDate:Print()coutyear“-”month“-”dayendl;,int TDate:IsLeapYear()return(year%4=0,void TDate:SetDate(int y,int m,int d)year=y;month=m;day=d;,类名,成员函数,作用域运算符,2.作用域运算符,成员函数定义在类体外时,应标识成员函数所属的类,:(),void Tdate:SetDate(int y,i
4、nt m,int d)year=y;month=m;day=d;,作用域运算符,若成员函数定义在类体内,则无需标识所属类;若所有成员函数都在类体内定义,则“实现部分”省略!定义在类体内的成员函数是inline函数。,class TDate public:void SetDate(int y,int m,int d)year=y;month=m;day=d;int IsLeapYear()return(year%4=0,三、定义类时应注意事项,1.类体中不允许对所定义的数据成员初始化,整形、浮点型、字符型、数组、指针、引用;另一个类的对象;自身类的指针或引用,但自身类的对象不可以!,class
5、N;,/类N的提前说明,2.类中数据成员的类型任意,4.习惯上将类的说明部分或整个定义部分(包括实现部分)放在一个头文件中比较方便。,如:定义日期类TDate的头文件 tdate.h,3.一般在类体内先说明公有成员,后说明私有成员;比较方便。,程序中引用时:#include“tdate.h”,5.2 对象的定义,一、对象的定义格式,二、对象成员的表示方法,对象是类的具体实例定义对象前,先定义该对象所属的类,一、对象的定义格式,中可以是一般的对象名、指向对象的指针或引用名、对象数组名等,例:TDate date1,date2,*Pdate,date31;,例:TStack stack1,stac
6、k2,*Pstack,对象指针,对象引用,对象数组,二、对象成员的表示,注:引用对象的成员表示与一般对象的成员表示相同,数据成员:.成员函数:.(),例:date1.year,date1.month,date1.day例:date1.SetDate(int y,int m,int d)例:rstack.number,一般对象,成员运算符,例:Pdateyear,Pdatemonth,Pdateday例:PdateSetDate(int y,int m,int d),2.指向对象的指针,成员运算符作用对象:指针,例:Pdateyear(*Pdate).year,例5.1,#include#inc
7、lude“tdate.h”/文件包含命令 void main()TDate date1,date2;/定义Tdate类的两个对象date1.SetDate(1996,5,4);/通过成员函数为对象赋值date2.SetDate(1998,4,9);int leap=date1.IsLeapYear();coutleapendl;date1.Print();date2.Print();/调用成员函数显示数据成员值,1,1996-5-4,1998-4-9,例5.2,头文件tpoint.h,class TPoint public:void SetPoint(int x,int y);int Xcoo
8、rd()return X;/成员函数定义在类体内 int Ycoord()return Y;void Move(int xOffset,int yOffset);private:int X,Y;void TPoint:SetPoint(int x,int y)/成员函数定义在类体外 X=x;Y=y;void TPoint:Move(int xOffset,int yOffset)X+=xOffset;Y+=yOffset;,例5.2,#include#includetpoint.h void main()TPoint p1,p2;p1.SetPoint(3,5);p2.SetPoint(8,1
9、0);p1.Move(2,1);p2.Move(1,-2);coutx1=p1.Xcoord(),y1=p1.Ycoord()endl;coutx2=p2.Xcoord(),y2=p2.Ycoord()endl;,x1=5,y1=6,x2=9,y2=8,class TPoint public:int Xcoord()return X;int Ycoord()return Y;,例5.2,#include#includetpoint.hvoid main()TPoint p1,p2;p1.SetPoint(3,5);p2.SetPoint(8,10);p1.Move(2,1);p2.Move(1
10、,-2);coutx1=p1.X,y1=p1.Ycoord()endl;coutx2=p2.X,y2=p2.Ycoord()endl;,Error:can not access private member!,class TPoint public:private:int X,Y;,5.3 对象的初始化,一、构造函数和析构函数,二、缺省构造函数和缺省析构函数,三、拷贝初始化构造函数,定义一个对象时,系统通过调用构造函数对该对象进行初始化,一、构造函数和析构函数,在类体中说明的两种特殊的成员函数;函数体可以写在类体内或类体外;,class TDate1 public:TDate1(int y,i
11、nt m,int d);/构造函数说明 TDate1();/析构函数说明 void Print();private:int year,month,day;TDate1:TDate1(int y,int m,int d)/构造函数定义 year=y;month=m;day=d;coutConstructor called.n;/无法声明不初始化的对象,否则必须有不初始化的构造函数TDate1:TDate1()/析构函数定义 cout Destructor called.n;void TDate1:Print()coutyear-month-dayendl;,例:,头文件tdate1.h,析构函数
12、的自动调用:函数体内定义的对象,当函数结束时,自动调用析构函数;new动态创建的对象,用delete释放时,自动调用析构函数。,#include#includetdate1.hvoid main()TDate1 today(1998,4,6),tomorrow(1998,4,7);couttoday is;today.Print();couttomorrow is;tomorrow.Print();,TDate1:TDate1(int y,int m,int d)year=y;month=m;day=d;coutConstructor called.n;TDate1:TDate1()coutD
13、estructor called.n;,例5.3,思考:析构函数调用的顺序?,TDate1:TDate1()/析构函数 coutyear“-month“-day“Destructor.n;,1998-4-6 Constructor.,1998-4-7 Constructor.,1998-4-7 Destructor.,1998-4-6 Destructor.,TDate1:TDate1(int y,int m,int d)/构造函数 year=y;month=m;day=d;coutyear-month-dayConstructor.n;,例5.3 修改,析构函数的调用顺序与构造函数的调用顺序
14、相反!,二、缺省构造函数和缺省析构函数,1.缺省构造函数,1)未定义任何构造函数时,编译器自动生成;,2)用户可自定义缺省构造函数;,2.缺省析构函数,:(),1)未定义析构函数时,由编译器自动生成;,2)空函数。,二、缺省构造函数和缺省析构函数,无参数,三、拷贝初始化构造函数,是一种构造函数,不指定返回值类型;只有一个参数,是对某个对象的引用;每个类必有;若无,编译器自动生成。,2.特点:,用一个已知对象来初始化一个被创建的同类对象,(拷贝已知对象的数据成员的值),1.功能:,:(&),例5.4,class TPoint public:TPoint(int x,int y)X=x;Y=y;/
15、构造函数TPoint(TPoint,头文件tpoint1.h,TPoint:TPoint(TPoint,用已知对象初始化被创建的同类对象,#include#includetpoint1.hvoid main()TPoint P1(5,7);TPoint P2(P1);coutP2=P2.Xcoord(),P2.Ycoord()endl;,TPoint:TPoint(TPoint,Copy_ initialization Constructor.P2=5,7 Destructor Called.Destructor Called.,例5.4,是一种构造函数,不指定返回值类型;只有一个参数,是对某
16、个对象的引用;每个类必有;若无,编译器自动生成。无法在新对象内改变被拷贝的原对象属性(见前例),2.特点:,用一个已知对象来初始化一个被创建的同类对象,(拷贝已知对象的数据成员的值),1.功能:,:(const&),三、拷贝初始化构造函数,所引用的对象不可更新,#include#includetpoint1.h“void main()TPoint P1(5,7);TPoint P2(P1);coutP2=P2.Xcoord(),P2.Ycoord()endl;,TPoint:TPoint(const TPoint,例5.4,所引用的对象不可更新,明确表示由一个对象初始化另一对象时:如:TPoi
17、nt P2(P1);对象作函数实参传递给函数形参时:如:P=fun(N);用实参N初始化被调用函数的形参对象作函数返回值时:如:return R;系统用对象R初始化一个匿名对象,拷贝初始化函数使用场合,例5.5,#include#include tpoint1.hTPoint f(TPoint Q)coutokn;int x,y;x=Q.Xcoord()+10;y=Q.Ycoord()+20;TPoint R(x,y);return R;void main()TPoint M(20,35),P(0,0);TPoint N(M);/由一个对象初始化另一对象P=f(N);/对象作函数实参传递给形参
18、coutP=P.Xcoord(),P.Ycoord()endl;,Copy_initialization Constructor.,Copy_initialization Constructor.,ok,Copy_initialization Constructor.,Destructor Called.,Destructor Called.,Destructor Called.,P=30,55,Destructor Called.,Destructor Called.,Destructor Called.,11.拷贝初始化构造函数共使用了三次:Tpoint N(M);时、调用函数f(),实参
19、N给形参对象Q初始化时、执行f()中的返回语句return R;系统用返回值初始化一个匿名对象2.析构函数调用三次:退出f()时,释放该函数中定义的对象Q,R,调用两次。返回main()时,用赋值运算将匿名对象赋值给对象P,然后释放匿名对象时调用。最后退出整个程序,又调用三次析构函数,分别释放main()中定义的对象M,P和N。,5.4 成员函数的特性,一、内联函数和外联函数,二、重载性,三、设置参数的缺省值,一、内联函数和外联函数,1.内联函数,注:在函数头前加“inline”,使外联函数变内联函数。,例5.6,class A public:A(int x,int y)X=x;Y=y;int
20、 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();,二、重载性,一个函数名对应多个函数的实现一般成员函数可以,构造函数可以,析构函数不可重载!,例5.7,#includevoid main()M a(10,20),b(4);couta=a.Xout(),a.Yout()endl;coutb=b.Xout(),b.Yout()endl;int i=a.Add();/i=10+20int j=a.Add(3,9)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 第五 对象
链接地址:https://www.31ppt.com/p-5662803.html