Static成员变量,static成员函数解析.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成员变量,static成员函数解析

篇1:Static成员变量,static成员函数解析

最近看EffectiveC++常常看到一些和static相关的内容,盼望综合整理一下,假如有不全,还望补充:

1类中的Static成员变量

static成员它不像一般的数据成员,static数据成员独立于该类的任意对象而存在,每个static数据成员是与类关联的对象,并不与该类的对象相关联!

一般为类申请一个对象,是对类中成员变量申请一个副本,各个对象之间的成员变量和函数互不影响,但是static成员变量不是在栈空间而是在静态存储区,全部的类对象共享static变量,静态成员是可以独立访问的,无需创建任何对象就可以访问

只是定义一个static变量,这个变量不能在类当中进行初始化,当然包括类的构造函数,static成员的初始化在类的外部进行。

静态数据成员实际上是类域中的全局变量。所以,静态数据成员的定义(初始化)不应当被放在头文件中(在VS中也不报错)。

注:不要试图在头文件中定义(初始化)静态数据成员。在大多数的状况下,这样做会引起重复定义这样的错误。即使加上#ifndef#define#endif或者#pragmaonce也不行。

#include“static.h”#includeusingnamespacestd;classPerson{private:stringname;staticintage;public:Person(conststring//正确,静态数据成员base_object2;//错误base*pObject;//正确,指针base//正确,引用};2类中static成员函数

由于static成员并不属于类中的某一个对象,所以static成员函数没有this指针,一般成员函数可以声明为const说明函数不会修改所属类

的信息,由此可见,没有this指针,静态成员函数不能被声明为const

static成员函数只能够访问static成员不能使用非static成员

classPerson{private:stringname;conststaticintage=20;staticstringaddress;public:Person(conststring//其中conststatic成员函数:这里应当是有一点迷惑性,其实就是返回类型为const

静态成员函数的地址可以赋值给一般的函数指针储存,一般成员函数地址只能赋值给类成员指针

classbase{staticintfunc1();intfunc2();};int(*pf1)()=//一般的函数指针int(base::*pf2)()=//成员函数指针3继承静态成员变量同样被类的派生类对象共享

#include”static.h“#includeclassbase{public:staticint_num;//声明};intbase::_num=0;//静态数据成员的真正定义classderived:publicbase{};voidmain(){basea;derivedb;a._num++;cout篇2:C++中类const、static、staticconst成员变量

#include

usingnamespacestd;

classTest

{

private:

constinta;//const成员变量只能在构造函数的成员初始化列表中初始化,不能在函数体中和其他地方

staticintb;//static成员变量需要在全局范围内初始化,格式:类型名类名::变量名=值

staticconstintc;//staticconst成员变量需要在全局范围内初始化,格式:类型名类名::变量名=值

public:

Test():a(1){}//正确

//Test(){a=1;}//错误

intget_a()

{

returna;

}

intget_b()

{

returnb;

}

intget_c()

{

returnc;

}

};

intTest::b=2;

constintTest::c=3;

intmain()

文档评论(0)

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

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

1亿VIP精品文档

相关文档