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
C++类的静态成员笔记的更多相关文章
- Java程序设计(2021春)——第三章类的重用笔记与思考
Java程序设计(2021春)--第三章类的重用笔记与思考 本章概览: 3.1 类的继承(概念与语法) 3.2 Object类(在Java继承最顶层的类) 3.3 终结类和终结方法(只能拿来用,不可以 ...
- 面向对象课后深入学习(C++ 类的静态成员详细讲解)
今天在刚申请了博客,一下午都在写那个随笔,所以说好的来看c++的也放在了最后,下星期就考试了,这个类的静态成员是我不是很懂的,在网上 看到一片很详细的博客考下来回去慢慢看. 在C++中,静态成员是属于 ...
- C++类的静态成员详解
类的静态成员分为静态数据成员和静态成员函数 静态数据成员 假如我们要设计一个战争游戏,游戏中有许多的兵种.游戏的过程中,每隔一段时间每个兵种都会产生,同时由于战争的消耗,每个兵种士兵的数量又会减少.为 ...
- C++ 类的静态成员及静态成员函数
对象与对象之间的成员变量是相互独立的.要想共用数据,则需要使用静态成员和静态方法. 只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进而可以使用静态成员变量.(因为静态成员变 ...
- C++ 类的静态成员详细讲解
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用.所以在所有对象中都可以共享它.使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节 ...
- C++ 类的静态成员详细讲解(转)
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用.所以在所有对象中都可以共享它.使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节 ...
- C++@类的静态成员变量和静态成员函数
参考: http://blog.csdn.net/morewindows/article/details/6721430 http://www.cnblogs.com/lzjsky/archive/2 ...
- C++ 类的静态成员详细讲解[转]
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用.所以在所有对象中都可以共享它.使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节 ...
- C++ 类的静态成员变量及静态成员函数
ps:下面所说 成员=成员变量+成员函数: 作用 由于对象与对象之间的成员变量是相互独立的.所以要想共用数据,则需要使用静态成员和静态函数. 空间分配 静态成员是在程序编译时分配空间,而在程序结束时释 ...
随机推荐
- codeforces#244(div.2) C
动漫节一游回来之后一直处于一种意识模糊的状态 看到大家都陆陆续续地过了C心里还是有点着急(自己没思路啊囧) 其实当时就在想该如何找到DFS中的一个环,然后再找到环路上最小的一个值 把所有环路上最小的值 ...
- Codeforces Round #570 (Div. 3) E. Subsequences (easy version) (搜索,STL)
题意:有一长度为\(n\)的字符串,要求得到\(k\)不同的它的子序列(可以是空串),每个子序列有\(|n|-|t|\)的贡献,求合法情况下的最小贡献. 题解:直接撸个爆搜找出所有子序列然后放到set ...
- zoj3623 Battle Ships
Battle Ships is a new game which is similar to Star Craft. In this game, the enemy builds a defense ...
- Codeforces Round #496 (Div. 3) D. Polycarp and Div 3 (数论)
题意:给你一个巨长无比的数,你可以将这个数划成任意多个部分,求这些部分中最多有多少个能被\(3\)整除. 题解:首先我们遍历累加每个位置的数字,如果某一位数或者累加和能被\(3\)整除(基础知识,不会 ...
- Codeforces Round #670 (Div. 2) A. Subset Mex (贪心)
题意:给你一长度为\(n\)的序列,将其分为两个集合,求两个集合中未出现的最小元素的最大值, 题解:用桶存一下每个元素的个数,两次枚举\([1,100]\),找出两个最小值即可. 代码: int t; ...
- 用了很多年Dubbo,连Dubbo线程池监控都不知道,觉得自己很厉害?
前言 micrometer中自带了很多其他框架的指标信息,可以很方便的通过prometheus进行采集和监控,常用的有JVM的信息,Http请求的信息,Tomcat线程的信息等. 对于一些比较活跃的框 ...
- Spring:解决因@Async引起的循环依赖报错
最近项目中使用@Async注解在方法上引起了循环依赖报错: org.springframework.beans.factory.BeanCurrentlyInCreationException: Er ...
- 通过js正则表达式实例学习正则表达式基本语法
正则表达式又叫规则表达式,一般用来检查字符串中是否有与规则相匹配的子串,达到可以对匹配的子串进行提取.删除.替换等操作的目的.先了解有哪些方法可以使用正则对字符串来实现这些操作: RegExpObje ...
- Kubernets二进制安装(7)之部署主控节点服务--apiserver二进制安装
kube-apiserver集群规划 主机名 角色 IP地址 mfyxw30.mfxyw.com kube-apiserver主 192.168.80.30 mfyxw40.mfyxw.com kub ...
- kubeadm---高可用安装
1.修改主机名 如何使用hostnamectl set-hostname name来为每台主机设置不同的机器名 #hostnamectl set-hostname k8s-master01 或者使用以 ...