转载:http://www.cnblogs.com/dongyanxia1000/p/4906592.html
1. 代码
1 #include<iostream> 2 #include<stdio.h> 3 using namespace std; 4 class Point 5 { 6 public: 7 Point(int x=0,int y=0):x(x),y(y) 8 { 9 count++; 10 } 11 Point(const Point &p):x(p.x),y(p.y) 12 { 13 count++; 14 } 15 ~Point(){ count--;} 16 int getx() const {return x;} 17 int gety() const {return y;} 18 static void showcount() 19 { 20 cout<<"object count="<<count<<endl; 21 } 22 private: 23 int x,y; 24 static int count; 25 }; 26 int Point::count=0; //静态数据成员定义和初始化,使用类名限定 27 int main() 28 { 29 void (* funcptr)()=Point::showcount; //定义一个函数指针,指向类的静态成员函数 30 Point a(4,5); 31 cout<<"Point A:"<<a.getx()<<","<<a.gety()<<endl; 32 funcptr(); 33 Point b(a); //用类的一个对象做另一个对象的参数,调用复制构造函数 34 cout<<"Point B:"<<b.getx()<<","<<b.gety()<<endl; 35 funcptr(); 36 system("pause"); 37 return 0; 38 }
2. 运行结果:
调用一次构造函数,count++,调用一次复制构造函数(拷贝构造函数),count++.
Note: count定义的是static类型的,值初始化一次,并保存后面改变后的值。
showcount()函数也是static类型的。
static全局变量与普通的全局变量的区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量的区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数的区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。