class AA{
public:
AA(int a, int b) {
m_a = a;
m_b = b;
}
private:
int m_a;
int m_b;
static m_c;
}
//表示此函数只在本文件内有效
static test(){
}
int main(void)
{
AA a1(10,20);
AA a2(100,200);
}
声明的时候,Class AA不开辟内存空间
静态成员变量m_c 存储在静态数据区
静态变量初始化的时候,一定类的外面
class {
........
}
int AA::m_c = 0; //不管私有公有都必须在类外面初始化,m_c对整个类共享
可以通过类名访问静态成员
AA::m_c = 200; //或者a1.m_c = 200 一样
如果m_c为私有成员,要想访问一个它只能提供一个静态成员方法,静态成员方法也是属于类的
static int getMc()
{
return m_c;
}
private:
static int m_c; //静态成员也受访问修饰符影响
例子1:
class Box
{
public:
Box(int l,int w)
{
m_len = l; //堆上分配内存空间
m_width = w;
}
int volume()
{
int v = m_len *m_width* height;
cout<<"高度是"<<m_width<<endl;
cout<<"体积是" <<v<<endl;
return v;
}
static void changeHeight(int h){
height = h;
}
private:
int m_len;
int m_width;
static int height;
};
int Box::height = 100; //静态成员初始化,类外
int main(void) {
Box b1(10,20);
Box b2(100,200);
b1.volume();
b2.volume();
Box::changeHeight(300); //静态成员对所有类成员共享的
b1.volume();
b2.volume();
return 0;
}
运行结果:
静态成员总结:
1.static成员变量实现了同类间信息共享
2.static 成员类外存储,求类大小,并不包含在内
3.static 成员是命名空间属于类的全局变量,存储在data区。
4.static 成员只能类外初始化。
5.可以通过类名访问(无对象生成时亦可),也可以通过对象访问。