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

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

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修饰,也不能申明为虚函数。

相关文章
|
存储 C语言 C++
37.【C/C++ 静态数据成员和静态成员函数 (超详解)】
37.【C/C++ 静态数据成员和静态成员函数 (超详解)】
151 0
|
5月前
|
存储 数据安全/隐私保护 C++
C++一分钟之-C++中的静态成员与静态函数
【6月更文挑战第20天】在C++中,静态成员(变量&函数)打破对象实例化规则,提供类级共享。静态变量独占一份,用于计数或共享配置,需类外初始化,注意访问权限。静态函数不依赖对象,直接通过类名调用,不使用`this`指针,适合工具函数或操作静态变量。示例展示了静态成员的使用,强调了理解和避免常见问题的重要性。
54 4
|
6月前
|
存储 安全 C++
C++程序中的静态成员
C++程序中的静态成员
41 1
|
6月前
|
缓存 C++
37静态成员
37静态成员
24 0
|
设计模式 C++
26 C++ - 静态成员
26 C++ - 静态成员
49 0
|
存储 编译器 C++
【C++】 静态成员函数
C++ 静态成员函数相关需要注意的事项
110 0
【C++】 静态成员函数
|
存储 编译器 C语言
【三、类中的静态成员】静态成员变量与静态成员函数(static关键字、this指针)
【三、类中的静态成员】静态成员变量与静态成员函数(static关键字、this指针)
156 0
C++静态数据成员和静态成员函数详解
C++静态数据成员和静态成员函数详解
166 0
|
C++
C++类的静态成员函数
C++类的静态成员函数
53 0