天天看点

C++类的静态成员笔记

  下面是C++类的静态成员笔记。

静态数据成员特征

  用关键字static声明

  为该类的所有对象共享,静态数据成员具有静态生存期

  必须在类外定义和初始化,用(::)来指明所属的类

举例说明-具有静态数据成员的Point类

C++类的静态成员笔记

 代码示例:

 1 #include 2  3 using namespace std; 4  5 class Point  //Point类定义 6 { 7     public: //外部接口 8         Point(int x = 0, int y = 0):x(x), y(y) //构造函数 9         {10             count++;11         }12 13         Point(Point &p)  //复制构造函数14         {15             x = p.x;16             y = p.y;17             count++;18         }19 20         ~Point() //析构函数,在main函数return返回前调用21         {22             count--;23         }24 25         int getX()26         {27             return x;28         }29 30         int getY()31         {32             return y;33         }34 35         void showCount()36         {37             cout << "Object count = " << count << endl;38         }39 40     private: //私有数据成员41         int x,y;42         static int count;  //静态数据成员43 };44 45 int Point::count = 0; //静态数据成员定义和初始化,使用类名限定46 47 int main(void)48 {49     Point a(4,5);50     cout << "Point A: " << a.getX() << "," << a.getY();51     a.showCount(); //输出对象个数52 53     Point b(a); //复制构造函数调用,定义对象b,其构造函数会使得count++54     cout << "Point B:" << b.getX() << "," << b.getY();55     b.showCount();56 57 58     return 0;59 }      

运行结果:

1 Point A: 4,5Object count = 1

2 Point B:4,5Object count = 2 

静态函数成员特征

  类外代码可以使用类名和作用域操作符来调用静态成员函数

  静态成员函数主要用于处理该类的静态数据成员,可以直接调用静态成员函数

  如果访问非静态成员,要通过对象来访问

举例说明-具有静态数据/函数成员的Point类

C++类的静态成员笔记
 1 #include 2  3 using namespace std; 4  5 class Point  //Point类定义 6 { 7     public: //外部接口 8         Point(int x = 0, int y = 0):x(x), y(y) //构造函数 9         {10             count++;11         }12 13         Point(Point &p)  //复制构造函数14         {15             x = p.x;16             y = p.y;17             count++;18         }19 20         ~Point() //析构函数,在main函数return返回前调用21         {22             count--;23         }24 25         int getX()26         {27             return x;28         }29 30         int getY()31         {32             return y;33         }34 35         static void showCount() //静态函数成员36         {37             cout << "Object count = " << count << endl;38         }39 40     private: //私有数据成员41         int x,y;42         static int count;  //静态数据成员43 };44 45 int Point::count = 0; //静态数据成员定义和初始化,使用类名限定46 47 int main(void)48 {49     Point::showCount();50 51     Point a(4,5);52     cout << "Point A: " << a.getX() << "," << a.getY();53 54     Point::showCount();55     //a.showCount(); //也可以输出对象个数56 57     Point b(a); //复制构造函数调用,定义对象b,其构造函数会使得count++58     cout << "Point B:" << b.getX() << "," << b.getY();59 60     Point::showCount();61     //b.showCount();//也可以输出对象个数62 63 64     return 0;65 }      

1 Object count = 0