C++笔记——类的静态成员和静态成员函数

来源:互联网 发布:网络维护58同城 编辑:程序博客网 时间:2024/05/29 18:26

类的静态成员和静态成员函数
类是类型而不是对象,每个类的成员都是该类数据成员的副本。然而,往往需要让类的所有成员在类的范围内共享某个数据,声明为static的类成员能在类范围内共享,称为静态成员。
类的数据成员和成员函数可以被声明为静态static。类的静态成员也称为类成员,因为它们不需要创建类的对象就可以访问。除静态成员外。C++也允许定义static成员函数。
静态的数据被所有的对象共享,与静态数据成员类似,静态成员函数也属于类本身。

1,静态数据成员
将类的某个数据成员声明为static 后,该数据成员就变为类的静态数据成员。静态数据成员属子整个类,而不像普通数据成员只属于某个对象。也就是说,类的静态数据成员
不依赖于类创建的对象,通过类就可以访问。
使用静态数据成员可以记录在类范围内使用的信息,如统计该类有多少个对象存在。
为Circle 类添加一个静态数据成员,代码如下,

class Circle{public:   //公有的    static int objectCount;//类的静态数据成员private:   //私有的    double R;public:       Circle(double r);    ~Circle();    double Area();};Circle :: Circle(double r) { R = r; };Circle :: ~Circle()    {    }double Circle::Area() {    return 3.14*R*R;}

对静态数据成员的初始化可以放到类外进行,例如:

class Circle{public:static int objectCount;   //类的静态数据成员//...};int Circle::objectCount=0;

需要注意,即使没有任何类对象的存在,静态数据成员也是存在的。

2.静态成员函数:
注意以下几点:
1、static成员的所有者是类本身和对象,但是多有对象拥有一样的静态成员。从而在定义对象是不能通过构造函数对其进行初始化。

2、静态成员不能在类定义里边初始化,只能在class body外初始化。

3、静态成员仍然遵循public,private,protected访问准则。

4、静态成员函数没有this指针,它不能返回非静态成员,因为除了对象会调用它外,类本身也可以调用。

静态成员函数可以直接访问该类的静态数据和函数成员,而访问非静态数据成员必须通过参数传递的方式得到一个对象名,然后通过对象名来访问

原创粉丝点击