静态成员(精品).ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《静态成员(精品).ppt》由会员分享,可在线阅读,更多相关《静态成员(精品).ppt(31页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、静态成员静态成员1 C+C+中在说明类成员中在说明类成员(数据成员和成员函数数据成员和成员函数)时,使用时,使用了了staticstatic关键字,则这类成员称为类的静态成员。关键字,则这类成员称为类的静态成员。静态成员是所有对象公有的。静态成员有静态数据静态成员是所有对象公有的。静态成员有静态数据成员和静态函数成员之分。成员和静态函数成员之分。1 1 静态数据成员静态数据成员说明静态数据成员的语句格式是:说明静态数据成员的语句格式是:static static 类型说明符类型说明符 成员名;成员名;类中的静态数据成员为类的类中的静态数据成员为类的所有对象所有对象共享,而不是共享,而不是某个对
2、象的成员。静态成员某个对象的成员。静态成员只存储一处只存储一处,供,供所有对所有对象象使用。一个对象对静态成员进行了改变后,其它使用。一个对象对静态成员进行了改变后,其它同类对象再访问静态成员时是访问的改变后的值。同类对象再访问静态成员时是访问的改变后的值。因此,静态成员可以实现多个同类对象数据的共享,因此,静态成员可以实现多个同类对象数据的共享,并且保证了数据的安全性。并且保证了数据的安全性。2静态数据成员的使用和注意事项如下所述:静态数据成员的使用和注意事项如下所述:静态数据成员在定义时前面加关键字静态数据成员在定义时前面加关键字staticstatic。例如:例如:class mycla
3、ss int a,b,c;class myclass int a,b,c;static int s;static int s;/定义静态数据成员定义静态数据成员 静态数据成员的初始化与一般的数据成员初始静态数据成员的初始化与一般的数据成员初始化不同,其格式如下:化不同,其格式如下::=;注意:初始化在类外进行,而前面不加注意:初始化在类外进行,而前面不加staticstatic。初始化时不加访问权限控制符初始化时不加访问权限控制符private,publicprivate,public等。等。初始时使用使用初始时使用使用作用域运算符作用域运算符:来标明所属类。因来标明所属类。因此,说明静态数据
4、成员是类的成员,为所有此,说明静态数据成员是类的成员,为所有类的对类的对象共有象共有,不属于某个特定的对象。,不属于某个特定的对象。3 例例 class myclass int a,b,c;class myclass int a,b,c;static int s;static int s;/定义静态数据成员定义静态数据成员 ;int myclass:s=0;int myclass:s=0;引用静态数据成员时使用下述格式:引用静态数据成员时使用下述格式::例例#include iostream.h include iostream.h classclass myclass int a,b,c;m
5、yclass int a,b,c;staticstatic int s;int s;/定义静态数据成员定义静态数据成员public:public:myclass(int x,int y,int z)myclass(int x,int y,int z)a=x;b=y;c=z;s=a+b+c;a=x;b=y;c=z;s=a+b+c;void printabc()void printabc()cout a b c endl;cout a b c endl;void printsum()cout s endl;void printsum()cout s endl;void setsum(int sum
6、)s=sum;void setsum(int sum)s=sum;4int myclass:s=0;int myclass:s=0;void main()void main()myclass m1(1,2,3),m2(4,5,6);myclass m1(1,2,3),m2(4,5,6);m1.printabc();m1.printabc();m2.printabc();m2.printabc();m1.printsum();m1.printsum();m2.printsum();m2.printsum();cout -endl;cout -endl;m1.setsum(100);m1.sets
7、um(100);m2.setsum(110);m2.setsum(110);m1.printsum();m1.printsum();m2.printsum();m2.printsum();5【例】【例】报名登记处登记每一位来访者的姓名,同时报名登记处登记每一位来访者的姓名,同时使使用静用静态数据成员态数据成员accountaccount自动产生一个流水号数,记自动产生一个流水号数,记入入numbernumber中。中。#include include#include#include/定义类定义类marriedmarried class class married married private
8、:private:int number;int number;/编号编号 char *name;char *name;/姓名姓名 public:public:static int glob;static int glob;/定义静态数据成员定义静态数据成员globglob void set_mes(char*a);void set_mes(char*a);/set_mes/set_mes函数说明函数说明 ;6/set_messet_mes函数定义函数定义 void married:set_mes(char*a)name=new charstrlen(a)+1;strcpy(name,a);/用
9、参数用参数a a的值修改私有变量。的值修改私有变量。number=+glob;/glob/glob加班后赋给加班后赋给numbernumber cout 编号:numberendl;int married:glob=0;/静态变量赋初始值静态变量赋初始值0 0void main()/主函数主函数 /生成对象数组生成对象数组personperson married person100;int i;/局部变量局部变量i i char str8;/局部变量局部变量strstr7coutendl;for(i=0;i100;i+)/循环循环100100次次 cout str;/读入姓名,存于读入姓名,存
10、于strstr personi.set_mes(str);/保存并显示保存并显示 coutendl;8说明:说明:(1)(1)不管一个类的对象有多少个,其静态数据成员不管一个类的对象有多少个,其静态数据成员也也只有一个只有一个,由这些对象所共享,可被任何一,由这些对象所共享,可被任何一个对象所访问。个对象所访问。(2)(2)在在一一个个类类的的对对象象空空间间内内,不不包包含含静静态态成成员员的的空空间间,所所以以静静态态成成员员所所占占空空间间不不会会随随着着对对象象的的产产生而分配,或随着对象的消失而回收。生而分配,或随着对象的消失而回收。(3)(3)静静态态数数据据成成员员的的存存储储空
11、空间间的的分分配配是是在在程程序序一一开开始始运运行行时时就就被被分分配配。并并不不是是在在程程序序运运行行过过程程中中在某一函数内分配空间和初始化。在某一函数内分配空间和初始化。9(4)(4)静静态态数数据据成成员员的的赋赋值值语语句句,既既不不属属于于任任何何类类,也也不不属属于于包包括括主主函函数数在在内内的的任任何何函函数数,静静态态变变量量赋赋初初值值语语句句应应当当写写在在程程序序的的全全局局区区域域中中,并并且且必必须须指指明明其其数数据据类类型型与与所所属属的类名,并用如下格式:的类名,并用如下格式:类型类型 类名:变量名类名:变量名=值;值;如:上例中的:如:上例中的:int
12、 visited:glob=0;int visited:glob=0;(5)(5)对对于于在在类类的的publicpublic部部分分说说明明的的静静态态数数据据成成员员,可可以以不不使使用用成成员员函函数数而而直直接接访访问问,即即使使未未定定义义类类的的对对象象,同同样样也也可可以以直直接接访访问问,但但在在使使用用时时也也必必须须用用类类名名指指明明所所属属的的类类,如如在在上上例例中中的的globglob数数据据成成员员,可可以以在在mainmain函函数数体体中中直直接接访访问问,coutvisited:glob;coutvisited:glob;而而privateprivate和和
13、protectedprotected部部分分的的静态成员静态成员只能只能通过类的成员函数访问。通过类的成员函数访问。10静态成员函数的定义:静态成员函数的定义:static static 类型类型 函数名(形参)函数名(形参)函数体函数体 与与静静态态数数据据成成员员一一样样,静静态态成成员员函函数数与与类类相相联联系系,不不与与类类的的对对象象相相联联系系,所所以以访访问问静静态态成成员员函函数数时,不需要对象。时,不需要对象。当一个成员函数被说明为当一个成员函数被说明为staticstatic时,它是静态成员时,它是静态成员函数。静态成员函数不与特定的对象关联,为所有函数。静态成员函数不与
14、特定的对象关联,为所有类的对象共享类的对象共享。2 静态成员函数静态成员函数11 例例#include iostream.h class myclass int x;/static int c;static int total_length;public:myclass(int a)x=a;static int set_total_length();/说明静态成员函数说明静态成员函数 ;int myclass:total_length=0;int myclass:set_total_length()/定义静态成员函数定义静态成员函数 total_length=total_length+x;re
15、turn total_length;void main()class myclass m1(10),m2(20),m3(30);cout m1.set_total_length()endl;cout m2.set_total_length()endl;cout m3.set_total_length()endl;12在静态成员函数的实现中,可以引用类中说明的在静态成员函数的实现中,可以引用类中说明的静态数据成员,但静态数据成员,但不能不能直接引用直接引用非静态数据成员非静态数据成员。这是因为编译程序无法确定静态成员函数中非静这是因为编译程序无法确定静态成员函数中非静态数据成员是属于哪个对象的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 静态 成员 精品
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内