C++ 类中静态成员

来源:互联网 发布:钉钉绑定阿里云邮箱 编辑:程序博客网 时间:2024/06/06 03:29

    前几天参加了一个电话面试,说起C++中静态成员的使用,顿时懵了。。。我目前所在的公司主要是C编程,只知道C静态函数只能在本文

 

件内调用。C静态局部变量在函数体内定义声明使用,但其生存期为整个源程序(即函数体调用结束后,静态变量还是继续存在,但是不能再

 

使用它);C静态全局变量在源文件内定义使用,其生存期同样为整个源程序,而且只能在源文件内部使用,其他源文件不能对它使用extern

 

声明。即,C静态局部变量改变了普通局部变量的生存期,C静态全局变量改变了普通全局变量的作用域。

 

    C++ 中的静态成员除了上述C所说的,还有其特有的,就是C++ 类中的静态数据成员。C++类中静态数据成员的pulic/private/protect

 

属性与普通成员一样,只不过它是类域中中的全局变量。因为它要比任何普通的成员变量都要先初始化,即类的对象没有生成,我都可以访问

 

它,所以,它的初始化不能放在类的定义中。例:

 

class Base {

 

private:

 

    static  const  int udwi;

 

};

 

const int Base:: udwi = 1;   //初始化无需加static关键字,不受private protected限制。

 

因为它是全局变量,所以该类的所有对象,包括该类派生类的所有对象,都共享一个共同的存储空间(记忆性)。

 

静态数据成员可以成为成员函数的可选参数(有实际意义吗?没想通)。

 

静态数据成员类型可以是所属类的类型,而普通数据成员只能声明为所属类类型的指针或引用(不知道实际意义)

 

关于C++ 中类的静态成员函数,只能访问类的静态成员变量,而不能访问类中的普通成员变量,它的意义在于类中的静态成员函数是跟类绑

 

定在一起的,对于用户来说,这个类的静态函数是和这个类相关的。(在类设计中,不应该把所有的逻辑当成类的成员函数来实现)。

 

任何类的成员函数,它都有一个隐藏的参数,就是一个指向自己的THIS指针,但是静态的成员函数没有这个隐藏的参数,这样就是为什么

 

类的的静态成员函数不能访问类中的非静态成员变量的原因。。。这也是为甚么静态成员函数能够回调函数的原因。。。。

原创粉丝点击