静态成员变量
在类中,用static修饰的类成员变量称为静态成员变量
特征:
1. 所有对象共享同一份数据
2. 在编译阶段分配内存
3. 类内定义,类外初始化
4.静态成员也是类的成员,受public、protected、private 访问限定符的限制
两种访问方式:
通过对象进行访问(对象.静态成员)
class Person
{
public:
static int age;
};
int Person::age=0;
//通过对象进行访问
Person p;
p.age
通过类名进行访问(类名::静态成员)
class Person
{
public:
static int age;
};
int Person::age=0;
//直接通过类名访问
Person::age
静态成员函数
在类中,用static修饰的类成员函数称为静态成员函数
特征:
1. 所有对象共享同一份函数
2. 静态成员函数内部只能访问静态成员变量
3.静态成员函数也是类的成员函数,受public、protected、private 访问限定符的限制
class A
{
public:
static void show()
{
cout << _a << endl;
cout << _b << endl; //err,静态成员函数只能访问静态变量,因其没有this指针。
}
static int _a;
int _b;
};
计算一个类创建了多少个对象
class Count
{
public:
Count()
{
count++;
}
Count(const Count& p)
{
count++;
}
~Count()
{
count--;
}
static int GetACount()
{
return count;
}
private:
static int count;
};
int Count::count = 0; //类外初始化静态成员变量
void test2()
{
cout << Count::GetACount() << endl; //0
Count a1, a2;
Count a3 (a2);
cout << Count::GetACount() << endl; //3
}