C++类的静态成员笔记

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

静态数据成员特征

  用关键字static声明

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

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

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

 代码示例:

 1 #include<iostream>
 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类

 代码示例:

 1 #include<iostream>
 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

2 Point A: 4,5Object count = 1

3 Point B:4,5Object count = 2 

 

posted @ 2021-02-20 11:28  `Konoha  阅读(52)  评论(0编辑  收藏  举报