下面是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++类的静态成员笔记的更多相关文章

  1. Java程序设计(2021春)——第三章类的重用笔记与思考

    Java程序设计(2021春)--第三章类的重用笔记与思考 本章概览: 3.1 类的继承(概念与语法) 3.2 Object类(在Java继承最顶层的类) 3.3 终结类和终结方法(只能拿来用,不可以 ...

  2. 面向对象课后深入学习(C++ 类的静态成员详细讲解)

    今天在刚申请了博客,一下午都在写那个随笔,所以说好的来看c++的也放在了最后,下星期就考试了,这个类的静态成员是我不是很懂的,在网上 看到一片很详细的博客考下来回去慢慢看. 在C++中,静态成员是属于 ...

  3. C++类的静态成员详解

    类的静态成员分为静态数据成员和静态成员函数 静态数据成员 假如我们要设计一个战争游戏,游戏中有许多的兵种.游戏的过程中,每隔一段时间每个兵种都会产生,同时由于战争的消耗,每个兵种士兵的数量又会减少.为 ...

  4. C++ 类的静态成员及静态成员函数

    对象与对象之间的成员变量是相互独立的.要想共用数据,则需要使用静态成员和静态方法. 只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进而可以使用静态成员变量.(因为静态成员变 ...

  5. C++ 类的静态成员详细讲解

    在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用.所以在所有对象中都可以共享它.使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节 ...

  6. C++ 类的静态成员详细讲解(转)

    在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用.所以在所有对象中都可以共享它.使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节 ...

  7. C++@类的静态成员变量和静态成员函数

    参考: http://blog.csdn.net/morewindows/article/details/6721430 http://www.cnblogs.com/lzjsky/archive/2 ...

  8. C++ 类的静态成员详细讲解[转]

    在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用.所以在所有对象中都可以共享它.使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节 ...

  9. C++ 类的静态成员变量及静态成员函数

    ps:下面所说 成员=成员变量+成员函数: 作用 由于对象与对象之间的成员变量是相互独立的.所以要想共用数据,则需要使用静态成员和静态函数. 空间分配 静态成员是在程序编译时分配空间,而在程序结束时释 ...

随机推荐

  1. AtCoder Beginner Contest 171

    比赛链接:https://atcoder.jp/contests/abc171/tasks A - αlphabet 题意 给出一个字母,如果为大写输出 'A',如果为小写输出 'a' . 代码 #i ...

  2. SCZ 20170812 T1 HKJ

    因为题面实在是太过暴力,就不贴链接了--我自己重新写一下题面吧-- 题目描述 给定一张带权有向图,设起点为1,终点为n,每个点除编号外还有一个序号,要求输出从起点至终点的最短路经过的点的序号和最短距离 ...

  3. 【noi 2.6_9271】奶牛散步(DP)

    这题与前面的"踩方格"重复了,而且是大坑题!题目漏写了取模12345的条件! 详细解析请见我之前的博文--http://www.cnblogs.com/konjak/p/59368 ...

  4. HDU 3032 Nim or not Nim?(SG打表找规律)

    题意: 给你n堆石子,你每次只能操作一堆石子 1.拿去任意个,最少1个 2.把这一堆分成两堆,没有要求对半分 解析+代码: 1 //解题思路: 2 //对于一个给定的有向无环图,定义关于图的每个顶点的 ...

  5. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲网上区域赛模拟赛. A.Easy Equation (前缀和/差分)

    题意:RT,给你四个数\(a,b,c,d\),求\(x+y+z=k\)的方案数. 题解:我们可以先枚举\(x\)的值,然后\(x+y\)能取到的范围一定是\([x,x+b]\),也就是说这个区间内每个 ...

  6. js面向对象封装级联下拉菜单列表

    本实例开发的级联下拉菜单是根据已有json数据创建的DOM元素.点击文本框后,显示一级菜单.如果菜单中包含子菜单,菜单右侧会有指示箭头.点击菜单之后,会再显示下一级菜单,以此类推.当菜单下无子菜单时, ...

  7. 一个方便 LeetCode 复习的脚本

    这个脚本半年前就在用了,只不过一直没有公开. 这是一个简易的 LeetCode 自动统计程序, 可自动统计最近提交通过的题目, 并以 Markdown 的形式展示相关的数据. 采用 GitHub Ac ...

  8. Nginx基础 - 配置缓存web服务

    1.缓存配置语法 1)proxy_cache配置语法 Syntax: proxy_cache zone | off; Default: proxy_cache off; Context: http, ...

  9. Python 3的f-Strings:增强的字符串格式语法(指南)

    最近也在一个视频网站的爬虫,项目已经完成,中间有不少需要总结的经验. 从Python 3.6开始,f-Strings是格式化字符串的一种很棒的新方法.与其他格式化方式相比,它们不仅更具可读性,更简洁且 ...

  10. vue项目webpack打包后修改配置文件

    从webpack打包结构中我们知道,vue中有一个存放外部资源的文件夹static,它里面的文件是不会被打包编译的,所以我们就可以利用外部引入js的方式将我们的想要的数据在index.html中以js ...