类的静态成员

晨曦之光 发布于 2012/03/09 14:14
阅读 138
收藏 0

本博客(http://blog.csdn.net/livelylittlefish)贴出作者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正!

 

类的静态成员

 

1. 一个例子 

 

 

#include <iostream>
using namespace std;
 
class CMyTest
{
int a;
static int b;
public:
CMyTest(int a);
static void show();
};
 
//definition and initialization
//static in CMyTest::b=0;        //error, here, key word "static" can not appear
int CMyTest::b=0;
 
//non-static member function can access static member variables
CMyTest::CMyTest(int x)
{
a = x;
b += x;
}
 
//static member function only accesses static member variables
void CMyTest::show()
{
//compiler error information
//error C2597: illegal reference to non-static member 'CMyTest::a'
//cout<<"a = "<<a<<endl;        //error, because a is a non-static member variable
cout<<"b = "<<b<<endl;        //right, because b is a static member variable
}
 
int main()
{
CMyTest obj1(100);
obj1.show();
 
CMyTest obj2(200);
obj2.show();
 
CMyTest::show();        
return 0;
}

 

运行结果如下:

b=100

b=300

b=300

 

2. 小结

 

  • 静态成员函数可以访问静态成员变量和和静态成员函数
  • 非静态成员函数也可以访问静态成员变量和和静态成员函数
  • 静态成员函数没有this指针,无法访问属于类对象的非静态成员变量和非静态成员函数
  • 由于没有this指针的额外开销,因此静态成员函数与类的非静态成员函数相比速度上会有少许的增长
  • 静态成员函数/变量属于整个类,没有this指针,该类的所有对象共享这些静态成员函数/变量
  • 非静态成员函数/变量属于类的具体的对象,this是缺省的
  • 静态成员变量在类内声明,且必须带static关键字;在类外初始化,且不能带static关键字
  • 静态成员函数在类内声明,且必须带static关键字;在类外实现,且不能带static关键字

原文链接:http://blog.csdn.net/livelylittlefish/article/details/4471616
加载中
返回顶部
顶部