类中的静态成员小总结

来源:互联网 发布:淘宝爆款打造教程 编辑:程序博客网 时间:2024/06/08 19:35

  因为一个疑问:静态成员函数不能被对象调用?静态成员函数应该是既可以通过类名直接调用,也可以通过对象名进行调用。还有一个疑问就是:私有的静态成员变量在类外使用是否影响了封装性?这个答案应该是静态成员变量不能在类外使用只是在类外初始化。因为疑问引发了对类中静态是怎么使用的,各对象如何调用的思考。

   

 使用静态成员在类加载的时候就会分配内存存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。每一个对象会共享静态成员,对多个对象来说,静态成员只存储一处,供所有对象共用。静态成员的值对每个对象都是一样,但它的值是可以更新的。所以在定义完类之后需要对静态成员初始化,只要对静态成员的初始化一次,之后所有对象都可以共享使用,值会不断更新(有点像操作系统中共用一个缓存)。和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则,在初始化的时候在类外进行,不加关键字static以免和一般的静态变量混淆,加上类的作用域符,不加访问权限符:public,private,protect。

class base{ 

private:
static int m_i;//正确,静态数据成员 
static void tes(int a)
{
cout << a;
}
}; 

int base::m_i = 2;

上述代码定义了一个静态成员变量m_i,初始化在类外,但是在类外调用的时候编译不能通过,可见静态成员变量不能在类外使用而只是在类外初始化而已。


对于静态成员函数,其与非静态成员函数之间的重大区别就是他不含this指针,所以无法直接访问自己类的非静态成员,要想访问,可以通过对象引用。静态成员函数可以通过类直接引用,也可以通过对象来引用,遵循访问权限符:public,private,protect。调用上述代码中的tes函数,可以在其他的成员函数中通过base p;p.tes(4)调用,也可以通过base::tes(4);(上述tes函数是私有)

Mark 2015,12,24


0 0
原创粉丝点击