第3讲类和对象精选文档.ppt
《第3讲类和对象精选文档.ppt》由会员分享,可在线阅读,更多相关《第3讲类和对象精选文档.ppt(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第3讲类和对象讲类和对象本讲稿第一页,共五十页类的定义格式:类的定义格式:class 类名类名 private:成员数据成员数据;成员函数;成员函数;public:成员数据成员数据;成员函数;成员函数;protected:成员数据成员数据;成员函数;成员函数;;关键字关键字类名类名私有私有公有公有保护保护class Student private:char Name20;float Math;float Chiese;public:float average;void SetName(char*name);void SetMath(float math);void SetChinese(fl
2、oat ch);float GetAverage(void);分号不能少分号不能少本讲稿第二页,共五十页C+有有三三种种访访问问控控制制属属性性:public表表示示成成员员是是公公有有的的,private表表示示成成员员是是私私有有的的,protected表示成员是受保护的。表示成员是受保护的。缺缺省省情情况况下下,类类中中说说明明的的所所有有函函数数和和变变量量都都为为这这个类所私有个类所私有private。私有成员只能被私有成员只能被本类本类的成员函数访问。的成员函数访问。公公有有成成员员不不但但可可以以被被本本类类的的其其它它成成员员访访问问,还还可可以以被被程序中该程序中该类以外的对
3、象类以外的对象访问。访问。保保护护成成员员可可以以由由本本类类的的成成员员访访问问,也也可可以以由由本本类类的的派生类派生类的成员访问。的成员访问。类成员的访问控制类成员的访问控制本讲稿第三页,共五十页类成员的访问控制类成员的访问控制私有成员私有成员公有成员公有成员保护成员保护成员类内函数类内函数可以调用可以调用可以调用可以调用可以调用可以调用类外函数类外函数不可调用不可调用可以调用可以调用不可调用不可调用私有函数私有函数公有函数公有函数保护函数保护函数类内函数类内函数可以调用可以调用可以调用可以调用可以调用可以调用类外函数类外函数不可调用不可调用可以调用可以调用不可调用不可调用本讲稿第四页,
4、共五十页class A float x,y;public:void Setxy(float a,float b)x=a;y=b;void Print(void)coutxtyendl;xySetxy()Print()A私有数据私有数据公有函数公有函数在在类外不能直接使用类外不能直接使用 x 或或 y,必须通过,必须通过Setxy()给给 x 或或 y 赋值,通过赋值,通过Print()输出输出 x 或或 y。类成员的访问控制本讲稿第五页,共五十页在类体内定义成员函数在类体内定义成员函数类的成员函数类的成员函数class A float x,y;public:void Setxy(float a
5、,float b)x=a;y=b;void Print(void)coutxtyendl;在类体内定义在类体内定义成员函数成员函数本讲稿第六页,共五十页class A float x,y;public:void Setxy(float a,float b);void Print(void);;void A:Setxy(float a,float b)x=a;y=b;void A:Print(void)coutxtyendl;在类体内说明成在类体内说明成员函数原型员函数原型在类体外定在类体外定义成员函数义成员函数在类体外定义成员函数在类体外定义成员函数类的成员函数类的成员函数本讲稿第七页,共五十
6、页 :()./函数体函数体在类体外定义成员函数的格式:在类体外定义成员函数的格式:void A:Setxy(float a,float b)x=a;y=b;函数类型函数类型类名类名函数名函数名形参列表形参列表函数体函数体类的成员函数类的成员函数本讲稿第八页,共五十页在在类类中中直直接接定定义义的的成成员员函函数数在在编编译译时时是是作作为为内内联联函函数数来实现的。来实现的。也也可可以以在在类类体体外外定定义义类类的的内内联联成成员员函函数数,在在类类体体外外定定义时,在成员函数的定义前面加上关键字义时,在成员函数的定义前面加上关键字inlineinline。类的成员函数类的成员函数class
7、 A、float x,y;public:void Setxy(float a,float b);void Print(void);;inline void A:Setxy(float a,float b)x=a;y=b;inline void A:Print(void)coutxtyendl;本讲稿第九页,共五十页类和对象的关系相当于普通数据类型与其变量类和对象的关系相当于普通数据类型与其变量的关系,如:的关系,如:A ob1,ob2;在定义类时,只是定义了一种在定义类时,只是定义了一种数据类型数据类型,并不为类并不为类分配存储空间。只有在定义了属于类的变量后,系统分配存储空间。只有在定义了属
8、于类的变量后,系统才会为才会为类的变量类的变量分配空间。分配空间。建立对象时,只为对象分配用于保存数据成员的内建立对象时,只为对象分配用于保存数据成员的内存空间,存空间,而成员函数的代码为该类的每一个对象而成员函数的代码为该类的每一个对象所共享所共享。对象的定义及使用对象的定义及使用类名类名对象名对象名本讲稿第十页,共五十页class A float x,y;public:void Setxy(float a,float b )x=a;y=b;void Print(void)coutxtyendl;a1,a2;void main(void)A a3,a4;定义全局对象定义全局对象定义局部对象定
9、义局部对象对象的定义及使用对象的定义及使用本讲稿第十一页,共五十页class A float x,y;public:float m,n;void Setxy(float a,float b )x=a;y=b;void Print(void)coutxtyendl;void main(void)A a1,a2;/定义对象定义对象 a1.m=10;a1.n=20;/为公有成员数据赋值为公有成员数据赋值 a1.Setxy(2.0,5.0);/为私有成员数据赋值为私有成员数据赋值 a1.Print();Print()Setxy()a1nmyxPrint()Setxy()a2nmyx10202.05.0
10、输出:输出:2 5对象的定义及使用对象的定义及使用对象成员的访问形式:对象名对象成员的访问形式:对象名.对象成员对象成员本讲稿第十二页,共五十页用点运算符用点运算符“.”只能访问对象的只能访问对象的公有成员公有成员,不能访问,不能访问对象的私有成员或保护成员。对象的私有成员或保护成员。若要访问对象的私有的数据成员,只能通过对象的公有若要访问对象的私有的数据成员,只能通过对象的公有成员函数来获取成员函数来获取。见下例:见下例:对象的定义及使用对象的定义及使用本讲稿第十三页,共五十页class A float x,y;public:float m,n;void Setxy(float a,floa
11、t b )x=a;y=b;void Print(void)coutxtyendl;void main(void)A a1,a2;a1.m=10;a1.n=20;/为公有成员数据赋值为公有成员数据赋值 a1.x=2;a1.y=5;a1.Setxy(2.0,5.0);a1.Print();必须通过类内公有函数访必须通过类内公有函数访问私有数据成员问私有数据成员非法,私有成员不非法,私有成员不能在类外访问能在类外访问本讲稿第十四页,共五十页同类型的对象之间可以整体赋值,例:同类型的对象之间可以整体赋值,例:#include class A float x,y;public:float m,n;voi
12、d Setxy(float a,float b )x=a;y=b;void Print(void)coutxtyendl;void main(void)A a1,a2;a1.m=10;a1.n=20;/为公有成员数据赋值为公有成员数据赋值 a1.Setxy(2.0,5.0);a2=a1;a1.Print();a2.Print();couta2.m=a2.m a2.n=a2.nendl;对象的定义及使用对象的定义及使用本讲稿第十五页,共五十页构造函数和析构函数构造函数和析构函数构造函数和析构函数是在类体中说明的两种构造函数和析构函数是在类体中说明的两种特殊的成特殊的成员函数员函数。构造函数是在创
13、建对象时,使用给定的值来将对象构造函数是在创建对象时,使用给定的值来将对象初始化。初始化。析构函数的功能正好相反,是在系统释放对象前,对析构函数的功能正好相反,是在系统释放对象前,对对象做一些善后工作对象做一些善后工作。构造函数构造函数可以带参数、可以重载可以带参数、可以重载,同时没有返回值。,同时没有返回值。构造函数是类的成员函数,系统约定构造函数名必须构造函数是类的成员函数,系统约定构造函数名必须与类名相同。与类名相同。本讲稿第十六页,共五十页class A float x,y;public:A(float a,float b)x=a;y=b;/构造函数,初始化对象构造函数,初始化对象 f
14、loat Sum(void)return x+y;void Set(float a,float b)x=a;y=b;Print(void)coutx=xty=yendl;void main()A a1(2.0,3.0);/定义时调用构造函数初始化定义时调用构造函数初始化 A a2(1.0,2.0);a2.Set(10.0,20.0);/利用成员函数重新为对象赋值利用成员函数重新为对象赋值 a1.Print();a2.Print();本讲稿第十七页,共五十页构造函数的函数名必须与类名相同构造函数的函数名必须与类名相同。定义构造函数时,定义构造函数时,不能指定函数返回值的类型,也不能指定函数返回值
15、的类型,也不能指定为不能指定为void类型类型。一个类可以定义若干个构造函数,进行一个类可以定义若干个构造函数,进行构造函数的重构造函数的重载。载。构造函数可以指定参数的缺省值。构造函数可以指定参数的缺省值。若定义的类要说明该类的对象时,构造函数必须是若定义的类要说明该类的对象时,构造函数必须是公公有的成员函数有的成员函数。如果定义的类仅用于派生其它类时,。如果定义的类仅用于派生其它类时,则可将构造函数定义为则可将构造函数定义为保护的成员函数保护的成员函数。构造函数构造函数本讲稿第十八页,共五十页class Afloat x,y;public:A(float a,float b=10)x=a;
16、y=b;A()x=0;y=0;void Print(void)coutxtyendl;void main(void)A a1,a2(20.0),a3(3.0,7.0);a1.Print();a2.Print();a3.Print();带缺省参数的构造函数带缺省参数的构造函数不带参数的构造函数不带参数的构造函数每一个对象必须每一个对象必须要有相应的构造要有相应的构造函数函数本讲稿第十九页,共五十页每一个对象必须要有相应的构造函数每一个对象必须要有相应的构造函数若没有显式定义构造函数,若没有显式定义构造函数,系统默认缺省的构造函数。系统默认缺省的构造函数。class A float x,y;pub
17、lic:A()void Print(void)coutxtyendl;隐含的缺省的构造函数隐含的缺省的构造函数A a1,a2;只允许这样定义对象只允许这样定义对象对象开辟了空间,但没有初始化对象开辟了空间,但没有初始化本讲稿第二十页,共五十页缺省的构造函数缺省的构造函数定义类时,若没有定义类的构造函数,则编译器定义类时,若没有定义类的构造函数,则编译器自动自动产生一个缺省的构造函数,格式为:产生一个缺省的构造函数,格式为:className:className()缺省的构造函数不对所产生对象的数据成员赋初值。缺省的构造函数不对所产生对象的数据成员赋初值。定义类时,定义类时,只要只要显式显式定义
18、了一个类的构造函数,则编译定义了一个类的构造函数,则编译器就不产生缺省的构造函数器就不产生缺省的构造函数所有的对象在定义时,必须调用构造函数,所有的对象在定义时,必须调用构造函数,不存在不存在没有构造函数的对象!没有构造函数的对象!若定义了没有参数的构造函数,或各参数均有缺省值若定义了没有参数的构造函数,或各参数均有缺省值的构造函数也称为缺省的构造函数,的构造函数也称为缺省的构造函数,缺省的构造函数缺省的构造函数只能有一个。只能有一个。本讲稿第二十一页,共五十页class Afloat x,y;public:A(float a,float b)x=a;y=b;void Print(void)c
19、outxtyendl;void main(void)A a1;A a2(3.0,30.0);显式定义了构造函数,不产显式定义了构造函数,不产生缺省的构造函数生缺省的构造函数error,定义时,没有构造定义时,没有构造函数可供调用函数可供调用本讲稿第二十二页,共五十页class Afloat x,y;public:A(float a=10,float b=20)x=a;y=b;A()void Print(void)coutxtyendl;void main(void)A a1;A a2(3.0,30.0);两个函数均为缺省两个函数均为缺省的构造函数的构造函数两个构造函数均可供调用,构造函数不唯一
20、两个构造函数均可供调用,构造函数不唯一本讲稿第二十三页,共五十页构造函数与构造函数与new运算符运算符可以使用可以使用new运算符来运算符来动态地动态地建立对象。建立时建立对象。建立时要要自动调用构造函数自动调用构造函数,以便完成初始化对象的数据,以便完成初始化对象的数据成员,最后返回这个动态对象的起始地址。成员,最后返回这个动态对象的起始地址。用用new运算符产生的动态对象,在不再使用这种对象运算符产生的动态对象,在不再使用这种对象时,必须用时,必须用delete运算符来释放对象所占用的存储运算符来释放对象所占用的存储空间。空间。用用new建立类的对象时,可以使用参数初始化动建立类的对象时,
21、可以使用参数初始化动态空间。态空间。本讲稿第二十四页,共五十页class Afloat x,y;public:A(float a,float b)x=a;y=b;A()x=0;y=0;void Print(void)coutxtyPrint();pa2-Print();delete pa1;/用用delete释放空间释放空间 delete pa2;/用用delete释放空间释放空间本讲稿第二十五页,共五十页析构函数析构函数析构函数的作用与构造函数正好相反,析构函数的作用与构造函数正好相反,是在对象的是在对象的生命期结束时,释放系统为对象所分配的空间,即要生命期结束时,释放系统为对象所分配的空间
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 对象 精选 文档
限制150内