- 前言
- 一、static 修饰成员变量
- 二、静态成员函数
- 三、静态成员函数与非静态成员函数的区别
- 总结
前言
一、static 修饰成员变量
静态变量是在编译阶段就分配空间,对象还没有创建时,就已经分配空间
静态成员变量必须在类中声明,在类外定义。
静态数据成员不属于某个对象,在为对象分配空间中不包括静态成员所占空间。
class Data
{
public:
int num;//普通成员变量
static int data;//静态成员变量(类内声明)
};
//定义的时候 不需要加static
int Data::data=100;//类外定义+初始化
void test01()
{
//data是静态成员变量 是属于类 可以通过类名称::直接访问
cout<
二、静态成员函数
class Data
{
private:
int num;//普通成员变量
static int data;//静态成员变量(类内声明)
public:
//普通成员函数 依赖于 对象的 必须对象调用
int getData(void)
{
return data;
}
//静态成员函数 属于类 而不属于对象
static int getDataStatic(void)
{
return data;
}
};
//定义的时候 不需要加static
int Data::data=100;//类外定义+初始化
void test01()
{
//cout<
注意:
1. 静态成员函数的目的操作静态成员数据
2. 静态成员函数不能访问非静态成员数据(静态成员函数内部没有this指针)
3. 普通成员函数可以操作 静态成员变量 非静态成员变量
4. 静态成员变量和静态成员函数 都有权限之分
三、静态成员函数与非静态成员函数的区别
- 成员函数
无论静态函数还是非静态函数,都属于类的(这一点与数据成员的静态非静态不同),对象并不拥有函数的拷贝。
两者的区别在于:非静态的函数由类对象(.或->)调用,这时将向函数传递this指针。而静态函数由类名调用,但静态函数不传递this指针,不识别对象个体。所以通常用来对类的静态数据成员操作。 - 类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接访问。
- 非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。
总结 


