static应用总结-arhaiyun.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
static应用总结-arhaiyun

【static总结】1.静态全局变量有以下特点:  该变量在全局数据区分配内存;   未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化);   静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;   静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量。对于一个完整的程序,在内存中的分布情况如下图:   代码区 //low address   全局数据区   堆区   栈区 //high address 全局变量和全局静态变量的区别   1)全局变量是不显式用static修饰的全局变量,但全局变量默认是静态的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量。   2)全局静态变量是显式用static修饰的全局变量,作用域是所在的文件,其他的文件即使用extern声明也不能使用。2.静态局部变量有以下特点:   该变量在全局数据区分配内存;   静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;   静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;   它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束3.静态函数 在函数的返回类型前加上static关键字,函数即被定义为静态函数。静态函数与普通函数不同,它只能在声明它的文件当中可见,不能被其它文件使用,其它文件中可以定义相同名字的函数,不会发生冲突。【面向对象的static关键字】1.静态数据成员类内静态数据成员有以下特点:   对于非静态数据成员,每个类对象都有自己的拷贝。而静态数据成员被当作是类的成员。无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份拷 贝,由该类型的所有对象共享访问。也就是说,静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共用。所以,静态数据成员的值对每个对象都是一样的,它的值可以更新。//Example  #include iostream.h   classMyclass  {   public:   Myclass(inta,intb,int c);   voidGetSum();   private:   inta,b,c;   static int Sum;//声明静态数据成员   };   intMyclass::Sum=0;//定义并初始化静态数据成员   Myclass::Myclass(inta,intb,int c)   { this-a=a;   this-b=b;   this-c=c;   Sum+=a+b+c; }   voidMyclass::GetSum()   { coutSum=Sumendl;   }   void main()   { Myclass M(1,2,3);   M.GetSum();   MyclassN(4,5,6);   N.GetSum();   M.GetSum(); } 静态数据成员存储在全局数据区。静态数据成员定义时要分配空间,所以不能在类声明中定义。静态数据成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式为:数据类型类名::静态数据成员名=值 在Example中,语句intMyclass::Sum=0;是定义静态数据成员。静态数据成员和普通数据成员一样遵从public,protected,private访问规则 类的静态数据成员有两种访问形式:类对象名.静态数据成员名 或 类类型名::静态数据成员名 静态数据成员主要用在各个对象都有相同的某项属性的时候。 同全局变量相比,使用静态数据成员有两个优势:   静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其它全局名字冲突的可能性;   可以实现信息隐藏。静态数据成员可以是private成员,而全局变量不能2.静态成员函数 与静态数据成员一样,我们也可以创建一个静态成员函数,它为类的全部服务而不是为某一个类的具体对象服务。静态成员函数与静态数据成员一样,都是类的内部 实现,属于类定义的一部分。 普通的成员函数一般都隐含了一个this指针,this指针指向类的对象本身,因为普通成员函数总是具体的属于某个类的具体对象的。通常情况下,this 是缺省的。如函数fn()实际上是this-fn()。但是与普通函数相比,静态成员函数由于不是与任何的对象相联系,因此它不具有this指 针。从这个意义上讲,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档