【C++】static在类中修饰成员变量成员函数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、定义:
  • 二、特性:
    • 1. 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区
    • 2. 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明
    • 3. 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问
    • 4. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员
    • 5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制
  • 3问题:
    • 1. 静态成员函数可以调用非静态成员函数吗?
    • 2. 非静态成员函数可以调用类的静态成员函数吗?
    • 3. 设计一个类,在类外面只能在栈上或者堆创建对象
  • 4.总结:


一、定义:

声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。静态成员变量一定要在类外进行初始化

二、特性:

1. 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区

【C++】static在类中修饰成员变量成员函数_第1张图片

2. 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明

【C++】static在类中修饰成员变量成员函数_第2张图片

算是给静态成员变量的的一个特权,private里面的只是声明并没有创建空间,而我们静态成员变量为所有类共享不属于某一个类所以必须在类外定义

3. 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问

【C++】static在类中修饰成员变量成员函数_第3张图片

4. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员

我们知道正常在类里面的成员函数都会传一个隐藏的类型为( A* const this)的this指针,这样我们在函数里面使用的private里面的成员变量其实是this的,但静态成员函数为所有的类所共享的,不属于某个特定的类,所以不存在隐藏的this指针。
【C++】static在类中修饰成员变量成员函数_第4张图片

5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制

3问题:

1. 静态成员函数可以调用非静态成员函数吗?

不可以。非静态的成员函数调用需要this指针,他没有this

2. 非静态成员函数可以调用类的静态成员函数吗?

可以,我静态成员函数在静态区,谁都可以调用。

3. 设计一个类,在类外面只能在栈上或者堆创建对象

【C++】static在类中修饰成员变量成员函数_第5张图片

4.总结:

  1. 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区
  2. 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明
  3. 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问
  4. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员
  5. 静态成员也是类的成员,受public、protected、private

你可能感兴趣的:(c++,java,jvm)