C++学习笔记.关键字static&静态成员变量
Posted 归止于飞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++学习笔记.关键字static&静态成员变量相关的知识,希望对你有一定的参考价值。
static的一般用法
关键字static一般有两个用法:
- 在一般程序中声明变量,可以使得局部变量在程序的声明周期中保持存在,不会在离开作用域时进行销毁。可以在函数调用间保持值
- static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。
所以说,一个静态成员变量相当于一个被限制了作用域的全局变量。它不再存储在栈区或者内存区,而是存储在全局区。
类中的static
现在,我们重点讨论类中的static的运用。
如果我们在一个类中使用了static,在接下来的类操作中static将只有一个,其它操作都是在同一个静态变量上进行修改。
示例程序:
#include <iostream>
using namespace std;
class Person
public:
int m_age; //对象的年龄
static int s_num; //对象总的数量
Person();
Person(int a)
m_age = a;
s_num += 1;
;
int Person::s_num = 0;
int main()
Person student(18);
Person teacher(40);
cout << Person::s_num << endl;
cout << student.m_age << endl;
cout << teacher.m_age << endl;
cin.get();
return 0;
//结果:
//2
//18
//40
注意:
- 静态成员变量必须初始化。并且必须放在类的外面进行初始化。(相当于初始于一个全局变量)
- 没有实例一样可以直接访问静态成员。
静态成员函数
- 内部不能使用this指针(this指针只能用在非静态成员函数内)
- 不能是虚函数(虚函数只能是非静态成员函数)
- 内部不能访问非静态成员变量\\函数,只能访问静态成员变量/函数)
延伸与拓展:
1、在多线程开发中,注意局部变量的安全问题,尽量使只有一个线程访问局部变量
2、可以将static静态变量运用在设计模式中的单例模式中。
以上是关于C++学习笔记.关键字static&静态成员变量的主要内容,如果未能解决你的问题,请参考以下文章
Java学习笔记3.4.1 static关键字 - 静态变量