C++备课讲义第11章.ppt

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 第11章 静态成员与友元 通常,每当说明一个对象时,把该类中的有关成员数据拷贝到该对象中,即同一类的不同对象,其成员数据之间是互相独立的。 静态成员 class A{ int x,y; public: void Setxy(int a, int b) { x=a; y=b;} }; A a1, a2; a1.x a1.y a2.x a2.y ...... y=b ; x=a ; ...... a1. Setxy() a2. Setxy() a1.Setxy(1,2); a2.Setxy(3,4); this-x=a; this-y=b; 当我们将类的某一个数据成员的存储类型指定为静态类型时,则由该类所产生的所有对象,其静态成员均共享一个存储空间,这个空间是在编译的时候分配的。换言之,在说明对象时,并不为静态类型的成员分配空间。 在类定义中,用关键字static修饰的数据成员称为静态数据成员。 class A{ int x,y; static int z; public: void Setxy(int a, int b) { x=a; y=b;} }; A a1, a2; a1.x a1.y a2.x a2.y z a1. z a2. z 不同对象,同一空间 有关静态数据成员的使用,说明以下几点: 1、类的静态数据成员是静态分配存储空间的,而其它成员是动态分配存储空间的(全局变量除外)。当类中没有定义静态数据成员时,在程序执行期间遇到说明类的对象时,才为对象的所有成员依次分配存储空间,这种存储空间的分配是动态的;而当类中定义了静态数据成员时,在编译时,就要为类的静态数据成员分配存储空间。 2、必须在文件作用域中,对静态数据成员作一次且只能作一次定义性说明。因为静态数据成员在定义性说明时已分配了存储空间,所以通过静态数据成员名前加上类名和作用域运算符,可直接引用静态数据成员。在C++中,静态变量缺省的初值为0,所以静态数据成员总有唯一的初值。当然,在对静态数据成员作定义性的说明时,也可以指定一个初值。 class A{ int i,j; static int x,y;//定义静态成员 public: A(int a=0,int b=0,int c=0, int d=0){ i=a;j=b;x=c;y=d; } void Show(){cout i=i\tj=j\t; cout x=x\ty=y\n; } }; int A::x=0; //必须对静态成员作一次定义性说明 int A::y=0; void main(void ) { A a(2,3,4,5); a.Show(); A b(100,200,300,400); b.Show(); a.Show(); } a.x 和b.x在内存中占据一个空间 a.y 和b.y在内存中占据一个空间 i=2 j=3 x=4 y=5 i=100 j=200 x=300 y=400 i=2 j=3 x=300 y=400 class A{ int i,j; public: static int x; public: A(int a=0,int b=0,int c=0){ i=a ; j=b ; x=c; } void Show(){ cout i=i\tj=j\t; cout x=x\n; } }; int A::x=500; //int A::x void main(void ) { A a(20,40,10),b(30,50,100); a.Show (); b.Show (); cout “A::x=”A::x‘\n’; //可以直接用类名引用 } 在类外重新定义 3、静态数据成员具有全局变量和局部变量的一些特性。静态数据成员与全局变量一样都是静态分配存储空间的,但全局变量在程序中的任何位置都可以访问它,而静态数据成员受到访问权限的约束。必须是public权限时,才可能在类外进行访问。 4、为了保持静态数据成员取值的一致性,通常在构造函数中不给静态数据成员置初值,而是在对静态数据成员的定义性说明时指定初值。 class A{ int i; static int count; public: A(int a=0) { i=a; count++; cout Number of Objects=count\n; } ~A() { count--; cout Number of

文档评论(0)

好文精选 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档