C++ static静态成员

网友投稿 551 2022-05-29

01 基本概念

静态成员:在定义前面加了static关键词的成员。

class A { public: A(int a, int b):m_a(a),m_b(b) { num += m_a + m_b; } ~A(){ } void Fun(); // 普通成员函数 static void PrintNum() // 静态成员函数 { // 在静态成员函数中,不能访问非静态成员变量,也不能调用非静态成员函数 std::cout << num << std::endl; } private: int m_a; // 普通成员变量 int m_b; // 普通成员变量 static int num; // 静态成员变量 }; // 静态成员必须在定义类的文件中对静态成员变量进行初始化,否则会编译出错。 int A::num = 0; int main() { A a1(1,1); A::PrintNum(); // 访问静态函数 A a2(1,1); A::PrintNum(); // 访问静态函数 return 0; }

1

2

C++ static静态成员

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

输出结果

2 4

1

2

普通成员变量每个对象有各自的一份,而静态成员变量一共就一份,为所有对象共享。

这里需要注意的是sizeof运算符不会计算静态成员变量的大小,如下栗子:

class CTest { int n; static int s; };

1

2

3

4

5

则sizeof(CTest)等于4

普通成员函数必须具体作用于某个对象,而静态成员函数并不具体作用于某个对象。

因此静态成员不需要通过对象就能访问,因为他是共享的。

02 如何访问静态成员

A::PrintNum();

1

A a; a.PrintNum();

1

2

A *p = new A(); p->PrintNum();

1

2

A a; A & ref = a; ref.PrintNum();

1

2

3

03 小结

静态成员变量本质上是全局变量,哪怕一个对象都不存在,类的静态成员变量也存在。

静态成员函数本质上是全局函数。

设置静态成员这种机制的目的是将和某些紧密相关的全局变量和函数写在类里面,看上去像是一个整体,易于维护和理解。

在静态成员函数中,不能访问非静态成员变量,也不能调用非静态成员函数。

静态成员必须在定义类的文件中对静态成员变量进行初始化,否则会编译出错。

C++

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:makefile生成可执行文件、静态库、动态库模板
下一篇:计算机操作系统学习笔记 | 进程
相关文章