函数指针指向类的静态成员函数

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); //用对象a来初始化b,调用复制构造函数 34 cout << "Point B:" << b.getx() << "," << b.gety() << endl; 35 funcptr(); 36 system("pause"); 37 return 0; 38 }

2. 运行结果:

调用一次构造函数Point(x, y),count++

调用一次复制构造函数(拷贝构造函数)Point(&p),count++.

Note: count成员变量是static类型的,只初始化一次,并保存后面改变后的值。

3、static全局变量与普通全局变量的共同点和区别

共同点:生命周期,都是从开始定义一直到程序运行结束

不同点:作用域,static全局变量限定了它的作用域,只能用于本文件中。

4、static局部变量和普通局部变量的共同点和区别

共同点:作用域,作用在定义它的函数中

不同点:生命周期,static的局部变量从定义开始就一直存在到程序结束,而普通的局部变量在函数调用完成后就不存在。

即从存储空间的角度来说,static的局部变量一直占有内存,而普通的局部变量函数调用完成后会释放内存。

posted @ 2015-10-24 12:26  dongyanxia  阅读(2109)  评论(0编辑  收藏  举报