静态类成员静态数据成员希望数据为类的所有对象.ppt
上传人:天马****23 上传时间:2024-09-11 格式:PPT 页数:34 大小:185KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

静态类成员静态数据成员希望数据为类的所有对象.ppt

静态类成员静态数据成员希望数据为类的所有对象.ppt

预览

免费试读已结束,剩余 24 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

student(inta,floatf){num=a;score=f;}};3.3.1.2类定义外初始化¤语法:数据类型类名::数据成员名=初值;注意:①如果没有初值,系统自动初始化为0。②整型const静态数据成员可以在类定义体内用常量值初始化,但仍要在类定义体外定义该数据成员且不能再指定初始值。③静态数据成员的初始化不应该放在头文件中。一般放在类定义之后,main函数之前。产生类对象之前可能用到静态数据成员。例如:classAccout{{staticconstintnamesize=16;staticconstcharname[namesize];};constintAccout::namesize;constcharAccout::name[namesize]=”savingaccount”;3.3.1.3静态数据成员的访问类的成员函数中访问:用静态数据成员名直接访问非成员函数中访问public静态数据成员:类名::静态数据成员名对象.静态数据成员名指向对象的指针->静态数据成员名例如:计数已创建对象的数目classData{intnum;floatscore;public:staticintobject;Data(inta,floatf):num(a),score(f){object++;}~Data(){object--;}};3.3.2静态成员函数希望在产生对象之前访问private静态数据成员3.3.2.1声明与定义在类内普通成员函数声明前加上static关键字,在类外定义前不需再加static。注意:静态成员函数没有this指针,不能访问类的非静态成员,只能访问类的静态数据成员或是调用其它静态成员函数。3.3.2.2调用类名::静态函数名(参数表);对象.静态函数名(参数表);指向对象的指针->静态函数名(参数表);例如:classSmall{staticintobject;public:Small(){object++;}staticintget_n(){returnobject;}~Small(){object--;}};intSmall::object=0;intmain(){intn;n=Small::get_n();//…}3.3.3全局、静态局部类对象3.3.3.1局部静态类对象在函数或复合语句内,用static关键字定义的对象。例如:intfun(){staticData(1,89.0);return0;}代码执行过程中第一次遇到该对象定义时,构造函数被调用,程序运行中仅调用一次;在程序运行结束前,调用析构函数,也只调用一次。例如:classdemo{public:demo(){cout<<”objectconstructor\n”;}~demo(){cout<<”objectdestructor\n”}};voidfun(){staticdemod1;}intmain(){cout<<"mainstart\n";fun();cout<<"again\n";fun();输出:mainstartcout<<"mainend\n";}objectconstructoragainmainendobjectdestructor3.3.3.2全局类对象在函数外定义的对象。构造函数在main函数执行前被调用,析构函数在程序运行结束前调用。例如:classdemo{public:demo(){cout<<"objectconstructor\n";}~demo(){cout<<"objectdestructor\n";}};intmain(){cout<<"mainstart\n";cout<<"mainend\n";return0;}输出:objectconstructorstaticdemod1;mainstartmainendobjectdestructor3.4友元3.4.1友元函数3.4.1.1友元函数的声明允许一个类授权其它的函数或类访问它的非公有成员。友元声明以friend关键字开头,只能出现在类的定义中。友元不是类的成员,不受访问说明符的影响。一般将类中所有友元关系的声明放在类头之后。¤语法:friend数据类型函数名(参数标);3.4.1.2友元函数的参数成员函数由对象调用,系统传递this指针使其可以访问对象的成员。友元函数没有this指针,要访问对象的成员,必须将要访问的对象作为参数传递。访问类对象的成员必须加上对象名和成员访问运算符。例如:classData{friendvoidget_val(Data&it