下面是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

最新文章

  1. FPGA与simulink联合实时环路系列——实验二LED
  2. Picture Segmentation Using A Recursive Region Splitting Method
  3. static_cast、dynamic_cast、reinterpret_cast、const_cast以及C强制类型转换的区别
  4. [转]Sql server2005中如何格式化时间日期
  5. MyBatis知多少(16)MyBatis映射
  6. sqlplus 配置方法及相关命令
  7. js实现的新闻列表垂直滚动实现详解
  8. 重构17-Extract&#160;Superclass(提取父类)
  9. UVa 10868 (物理) Bungee Jumping
  10. SQL Server死锁日志各字段含义
  11. eval函数:\的应用
  12. javascript动态改变当前页面中元素的状态行为
  13. OnCreate
  14. Ubuntu13.04使用Mesa
  15. Struts2知识点学习笔记
  16. 强化学习(六)时序差分在线控制算法SARSA
  17. Aras前端的一些知识
  18. 二丶Django~1
  19. LeetCode in action
  20. Sql Server数据库之事务,视图,索引

热门文章

  1. Codeforces Round #428 (Div. 2) C. Journey (简单搜索)
  2. Kuroni and the Punishment CodeForces - 1305F 随机函数mt19937 + 质因子分解
  3. POJ1087 A Plug for UNIX(网络流)
  4. 牛客练习赛71 C.数学考试 (DP,容斥原理)
  5. 牛客小白月赛28 J.树上行走 (并查集,dfs)
  6. C#枚举(一)使用总结以及扩展类分享
  7. 爬虫入门三 scrapy
  8. pyspark Py4JJavaError: Unsupported class file major version 56
  9. 末日余晖 PC 版 下载
  10. Linked List &amp; List Node All In One