类的静态成员:
修饰class的数据成员,这种数据成员的生存期大于class的对象;静态数据成员是每个class有一份,普通数据成员是每个实例有一份,因此静态数据成员也叫类变量,普通数据成员也叫实例变量。
类的静态成员函数:
在成员函数前加上static就变成了静态成员函数;静态成员函数不能访问非静态成员函数或数据成员,但非静态可以访问静态。
因为静态是属于类的,无法感知创建的对象,所以它对你对象的函数或者数据是一无所知的,所以它没办法调用;而反过来,创建的对象是对类是可以感知的,所以是可以调用类函数和类成员的。
静态成员函数能够继承和覆盖,但没法是虚函数。
#include <iostream>
using namespace std;
class A
{
public:
static int a; //类的静态成员变量
static int get_a();//类的静态成员函数
int b;
int get_b();
};
int A::a = 100; //静态成员变量可以在类的外部直接定义
//int A::b = 1000; //普通成员变量在类的外部定义失败
int A::get_a()
{
return a; //类的静态成员函数只能访问类的静态成员变量
//return b + a; //静态成员函数无法调用普通成员变量
}
int A::get_b()
{
return b + a;//普通成员函数可以调用静态成员变量
}
int main(void)
{
cout << "a: " << A::get_a() << endl; //不需要类的实例,也可以调用类的静态成员函数
A m;
m.b = 90;
m.a = 100000;
cout << m.get_a() << endl;
cout << m.get_b() << endl;
cout << m.a << endl;
return 0;
}
运行结果: