您的位置:首页 > 编程语言 > C语言/C++

类的静态成员

2015-09-23 10:20 363 查看
静态成员是属于类的,各个对象都拥有类中每一个普通数据成员的副本,但静态成员数据只有一个实例存在,与定义了多少类对象无关。当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享,它在对象中不占用存储空间。

静态成员的值对所有的对象是一样的。静态成员可以被初始化,但只能在类体外进行初始化。

一般形式:
数据类型类名::静态数据成员名=初值
注意:不能用参数初始化表对静态成员初始化。一般系统缺省初始为0。

静态成员函数不能调用非静态数据成员,要通过类的对象来调用。静态成员函数必须通过对象名来访问非静态数据成员也是这个原因。

静态成员函数调用方便,不需要生成对象就能调用。比如
class X
{
public:
void MethodA();
static void MethodB();
}
此时MethodB可以直接调用,X::MethodB();
MethodA必须先生成类对象才能调用,X x; 	x.MethodA();


静态成员函数在类外实现时无须加static关键字,否则是错误的。
静态成员函数没有this指针,它不能返回非静态成员。

不要试图在头文件中定义(初始化)静态数据成员。在大多数的情况下,这样做会引起重复定义这样的错误。即使加上#ifndef #define #endif或者#pragma once也不行。 

静态数据成员被 类 的所有对象所共享,包括该类派生类的对象。即派生类对象与基类对象共享基类的静态数据成员。

★静态数据成员的类型可以是所属类的类型,而普通数据成员则不可以。普通数据成员的只能声明为 所属类类型的 指针或引用。举例如下: 

class base{ 
public : 
static base _object1;//正确,静态数据成员 
base _object2;//错误 
base *pObject;//正确,指针 
base &mObject;//正确,引用 
}; 

静态成员函数的地址可用普通函数指针储存,而普通成员函数地址需要用 类成员函数指针来储存。举例如下: 
class base{ 
static int func1(); 
int func2(); 
}; 

int (*pf1)()=&base::func1;//普通的函数指针 
int (base::*pf2)()=&base::func2;//成员函数指针 

参考链接:http://www.cnblogs.com/lzjsky/archive/2011/01/24/1943199.html
http://www.jb51.net/article/ 4000
41775.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息