一、静态数据成员
子:在类的数据成员声明前加上关键词是static,那么该数据成员就成为了类内的静态数据成员,我们看一个例
#include<iostream>
using namespace std;
class Point
{
private:
int x, y;
static int num; //声明静态数据成员
public:
Point()
{
x = y = 0;
num++;
cout << num << endl;
}
};
int Point::num = 0; //定义静态数据成员
int main()
{
Point a;
Point b;
Point c;
Point d;
return 0;
}
对于类的非静态数据成员,每个类对象都有自己的拷贝。而对于静态数据成员被当作是类的成员。就像上述例子中,虽然定义了4个对象,但是静态数据成员在程序中只有一份拷贝,由该类型的所有对象共享访问。对于这个类的多个对象来说,静态数据成员只分配一次内存,可以供所有的对象共用。因此,对于每个对象来说静态数据成员的值都是相同的,可以更新。
上面说了静态数据成员与非静态数据成员的区别,那么它的特点如下:
我们定义静态数据成员有几个好处如下:
静态成员函数和静态数据成员是类似的。它是为类的全部服务而不是为了某一个类的具体对象服务的。它和
静态数据成员一样都是在类的内部实现的,属于类定义的一部分。普通的成员函数都是具体属于某个类的具体对象的,一般都隐含一个this指针,通常情况下this是缺省的。与普通成员函数相比,静态成员函数不与任何一个对象相联系,所以它不具有this指针。从这个方面说,它无法访问属于类对象的非静态数据成员,也无法访问非静态成员函数,它只能调用其他的静态成员函数。下面看一个静态成员函数的例子:
#include<iostream>
using namespace std;
class Point
{
private:
int x, y;
static int num; //声明静态数据成员
public:
Point()
{
num++;
}
static void showsumofpoint(); //声明静态成员函数
};
int Point::num = 0; //定义静态成员函数
void Point::showsumofpoint() //定义静态成员函数
{
cout << num << endl;
}
int main()
{
Point a;
a.showsumofpoint();
Point b;
b.showsumofpoint();
Point c;
Point::showsumofpoint();
Point d;
Point::showsumofpoint();
return 0;
}
原文地址:http://blog.csdn.net/fk5431/article/details/45128939