一、静态数据成员
子:在类的数据成员声明前加上关键词是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