静态数据成员和静态成员函数

简介: 静态数据成员和静态成员函数

C++中的全局数据对于任何一个类的对象或其他源程序来说都是相等的,与C一样放在所有类和函数外面

如果在一个.cpp文件中定义了一个全局变量,其他的源文件要用是时,必须加上extern说明。


使用全局变量会带来不安全性,因为全局数据在整个程序中都是可见的,都可以对其进行修改,若不小心改错了将会影响整个程序的运行结果。并且全局变量与对象程序的封装性是相悖的,破坏了设计的信息隐藏。


为此C++提出了静态数据成员的概念,静态数据成员的值对同一个类的每一个对象都是一样的,一但某个对象中的静态数据成员更改了,则所有对象都会访问到更新后的值。

定义如下:


static <数据类型> <静态数据成员名>;



静态数据成员有如下性质:


  1. 是某类的所有对象都共享的数据成员。静态数据成员独立于类的任何对象而存在,与类关联,但不是与类对象关联。
  2. 必须对他进行初始化,其的初始化在类外进行,而前面不加static,以避免与一般静态变量或对象混淆。初始化时不加该成员的访问权限控制符private,public 等。初始化时要用作用域标明所属类。格式为 <数据类型> <类名> :: <静态数据成员名> = <值>;
  3. 静态数据成员的引用方式 静态数据成员可以定义为private或public 。如果是定义为public,可直接引用。格式为:<类名>::<静态成员名> 或 <对象名>.<静态成员名> 或 <对象指针>-><静态成员名>。如果是定义为private,只有通过公共接口函数引用


class Student{
public:
  static int counts;
  Student( ){ Counts++ ; }
};
int Student::Counts = 0 ;
int main()
{
  Student stu1,stu2;
  cout<<"the number is :"<<Student :: Counts<<endl;
  return 0;
}


也可以定义类的静态成员函数 :static <成员函数>

static 成员函数没有this指针,因其不是任何对象的组成部分。它可以直接访问所属类的static成员,但不能直接访问非static 成员static 成员函数在类外实现时前面也不加static。另外,不能用const修饰,也不能申明为虚函数。

相关文章
|
6天前
局部变量和成员变量
局部变量和成员变量 1.定义的位置不一样【重点】 局部变量:在方法的内部 成员变量:在方法的外部,直接写在类当中 2.作用范围不一样【重点】 局部变量:只有方法当中才可以使用,出了方法就不能再用 成员变量:整个类全都可以通用。 3.默认值不一样【重点】 局部变量:没有默认值,如果要想使用,必须手动进行赋值 成员变量:如果没有赋值,会有默认值,规则和数组一样局部变量和成员变量 1.定义的位置不一样【重点】 局部变量:在方法的内部 成员变量:在方法的外部,直接写在类当中 2.作用范围不一样【重点】
9 1
|
2月前
成员变量
成员变量:在方法的外部,直接写在类当中 2.作用范围不一样【重点】 局部变量:只有方法当中才可以使用,出了方法就不能再用 成员变量:整个类全都可以通用。
34 8
字节图解算法小册爆火出圈!GitHub标星43k,内容竟比小说还有趣
对于一个程序来说,数据结构和算法有多重要呢? 也正是因为数据结构与算法的重要,所以我们才一定要把这个地基打牢。今天我给大家准备了一份像小说一样有趣的算法入门书,用生动的图片一点一点帮助理解算法。
|
5月前
|
存储 监控 编译器
【C++】static关键字及其修饰的静态成员变量/函数详解
【C++】static关键字及其修饰的静态成员变量/函数详解
137 3
|
算法 编译器 程序员
Windows下Boost库的安装与使用
Windows下Boost库的安装与使用
2390 0
Windows下Boost库的安装与使用
|
Java
成员变量与局部变量
成员变量与局部变量
115 0
|
2月前
|
XML 监控 C#
Windows平台C#版RTSP转RTMP直播推送定制版
前几年我们发布了C++版的多路RTMP/RTSP转RTMP转发官方定制版。在秉承低延迟、灵活稳定、低资源占用的前提下,客户无需关注开发细节,只需图形化配置转发等各类参数,实现产品快速上线目的。如监控类摄像机、NVR等,通过厂商说明或Onvif工具,获取拉流的RTSP地址,图形化配置,完成拉流转发等操作,轻松实现标准RTMP服务器对接。
|
5月前
[MFC] 将像素坐标点缩放,准确的画在所在控件的图片上
[MFC] 将像素坐标点缩放,准确的画在所在控件的图片上
79 0
|
存储 数据可视化 前端开发
低代码可视化拖拽编辑器实现方案
低代码可视化拖拽编辑器实现方案
223 0
【C++】CMake中Visual Studio的MSVC版本与PCL版本对应关系
【C++】CMake中Visual Studio的MSVC版本与PCL版本对应关系
282 0