类是类型而不是具体的数据对象,类的对象都是该类的实例,每个类对象都具有自己的数据成员,而且是相互独立,各占内存空间。然而,程序中往往需要让类的所有对象在类的范围内共享某个数据。声明为static的类成员能够在类的范围中共享,称之为静态成员。
一、全局变量与静态数据成员
希望在同类的多个对象之间实现数据共享,可以用静态的数据成员实现。
使用静态数据成员不会破坏隐藏的原则,即保证了安全性。
二、静态数据成员特点
在每个类中只有一个拷贝,由该类的所有对象共同维护和使用静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后有相同的值。
三、静态数据成员的定义及初始化格式
static 类型标识符 静态数据成员名; //定义
类型标识符 类名:: 静态数据成员名 = 初始值;//初始化
说明:
(1)静态数据成员属于类所有的对象共有,占一份内存空间。
(2)静态数据成员是静态存储的,它是静态生存期。它在程序开始编译时就分配空间,而不是某个对象创建时分配的。也不随对象的撤销而释放,而是程序结束才释放空间。
(3)初始化在类体外进行,而且前面不加static,以免与一般静态变量相混淆。
(4)初始化时不加该成员的访问权限修饰符private,public等。
(5)初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。
四、静态数据成员的访问
类名 :: 静态数据成员名
Code:
类内.h定义:static int noofStds; //静态数据成员
.cpp中初始化:
int CStudent::noofStds = 0; //静态数据成员初始化
类内函数可直接引用,类外的普通函数引用时受访问权限的限制,访问方式为: CStudent::noofStds = x;
静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。
一、静态成员函数的定义格式
static 函数类型 静态成员函数名 ( 参数表 );
静态成员函数是在成员函数声明的前面加上关键字static。
二、调用静态成员函数使用如下格式
类名 :: 静态成员函数名 ( 参数表 );
三、静态成员函数的特点
(1) 对于公有的静态成员函数,可以通过类名或对象名来调用,而一般的非静态成员函数只能通过对象名来调用。静态成员函数可以由类名通过符号“::”直接调用。
(2)静态成员函数可以直接访问该类的静态数据成员和静态成员函数,不能直接问非静态数据成员和非静态成员函数。如果静态成员函数中要引用非静态成员时,可通过对象来引用。
Code2:
Cmystring为一个类,set_total_len为其中的静态成员函数,total_len为静态数据成员,len为普通成员。
方法一:通过传递对象的引用来确定非静态成员属于哪个类对象。
static int set_total_len(Cmystring str)
{
total_len+= str.len;
return total_len;
}
调用时:
Cmystring str1("this is the first string"); //
cout<<str1.set_total_len(str1)<<“\n”; //或
cout<<Cmystring::set_total_len(str1)<<”\n”;
原文地址:http://blog.csdn.net/xaut_zjb/article/details/40015587