在c++类中声明成员时可以加上static关键字,这样声明的成员就叫做静态成员(包括数据成员和成员函数)。例如:
class test
{ public:
test(){}
~test(){}
public:
//静态成员函数
static int getCount(){
return m_nCount;
}
private:
//静态数据成员
static int m_nCount;
};
int test::m_nCount=0;
静态数据成员和普通数据成员区别较大,体现在下面几点:
(1)普通数据成员属于类的一个具体的对象,只有对象被创建了,普通数据成员才会被分配内存。
而静态数据成员属于整个类,即使没有任何对象创建,类的静态数据成员变量也存在。
(2)因为类的静态数据成员的存在不依赖与于任何类对象的存在,类的静态数据成员应该在代码中
被显示的初始化,一定要在类外进行,例如上例。
(3)外部访问类的静态成员只能通过类名来访问,例如:test::getCount()。
(4)类的静态成员函数无法直接访问普通数据成员(可以通过类的指针等作为参数间接访问),而
类的任何成员函数都可以访问类的静态数据成员。
(5)静态成员和类的普通成员一样,也具有public、protected、
private3种访问级别,也可以具有返回值、const修饰符等参数。
一个类的静态数据成员仅创建和初始化一次。静态变量在编译期间就已经存在了,他的创建与消亡与实例的创建与消亡无关,其生命周期和全局变量的生命周期相同。(类的成员变量表示了一个类的属性,对应着对象的物质特性,他们在类的某个实例创建的时候创建,消亡的时候消亡。)
静态成员函数
静态成员函数只能访问静态数据成员、静态成员函数和类以外的函数和数据,不能访问非静态数据成员,但静态成员函数或静态数据成员可由任意访问许可的函数访问。原因是:当前对象的地址(this)是被隐含地传递到被调用的函数的。但一个静态成员函数没有this指针,所以它无法访问非静态的成员函数。
常对象:用const修饰的对象叫对象常量。
声明为常对象的同时必须被初始化,并从此不能改写对象的数据成员。
常成员函数:〈类型〉〈函数名〉(〈参数表〉)const;类型〉〈函数名〉(〈参数表〉)const;
常成员函数不能更新对象的数据,也不能调用非const修饰的成员函数。常对象只能调用类的常成员函数。
文章评论(0条评论)
登录后参与讨论