在程序运行时分配,非静态成员在实例化时分配
作用域在类内,通过发消息来引用
在类外初始化,不能通过初始化列表来初始化
int ::num=0;
所有成员共享静态成员空间(只分配一次)
非静态方法只属于对象
静态成员方法属于对象和类,只能访问静态成员
类内类外引用(不能破坏封装性)
1、对象引用:
对象.静态成员变量
2、类引用:
类::静态变量
#include<iostream>
#include<string>
using namespace std;
class people
{
public:
protected:
string name;//复杂类型
short age;
private:
static int num;//统计people实例化次数
//静态成员在程序运行时分配,不在此初始化
//静态成员,属于对象,属于类
public:
people()
{
num++;
}
//非静态方法,只属于对象
int getnum()
{
return num;
}
//静态方法,属于对象,属于类
static int givenum()
{
//cout<<age<<endl;报错,只能访问静态变量
//getnum();报错,非静态方法,只能对象访问
return num;
}
};
//初始化
int people::num=0;
int main()
{
people p1,p2,p3;//分配非静态空间
cout<<p1.getnum()<<endl;
cout<<people::givenum()<<endl;//调用静态方法
return 0;
}
结果
3
3