C++静态数据成员和静态成员函数详解

简介: C++静态数据成员和静态成员函数详解

目录

静态数据成员

结论

注意事项

静态成员函数

静态成员函数的调用


静态数据成员

在C++中,我们可以使用static关键字定义类成员,成员定义为静态的,只要我们将类成员进行成功创建时,那就意味着无论我们创建多少个对象,那么近代成员就始终只有一个副本

首先我们提出一个问题,在对学生成绩统计的案例中,我们如何计算出一共创建了多少个学生对象?接下来我们就用例子演示一遍

#include <iostream>
using namespace std;
class A {
public:
  A() {
    ++count;
  }
  void obj_num() {
    cout << "已经创建了的对象个数:" << count <<endl;
  }
private:
  static int count;
};
int A::count = 0;
int main() {
  A obj[3] = {
    A(),
    A(),
    A()
  };
  obj[2].obj_num();
  obj[3].obj_num();
  A c;
  c.obj_num();
  return 0;
}

输出结果:

已经创建了的对象个数:3

已经创建了的对象个数:3

已经创建了的对象个数:4

结论

我们可以得知对象是类的一个实例,并且创建的每一个对象都具有属于自己的数据成员,但是总有一部分数据,我们想让他们达到多个对象数据共享的目的,但是如果将一个变量定义为全局变量,就会带来严重的不安全性,这与我们类的封装性是有违的,这会严重破坏面向对象程序设计中的信息隐秘的方面,所以我们为了实现同一个类之间多个对象的数据共享,在C++中就提出了静态数据成员的概念,在一个类中,若将一个数据成员定义为static类型,那我这种成员,我们就把他称之为近战成员与一般的成员是不同的,这个进展成员是无论建立多少个类的对象,就始终只有一个静态数据成员的拷贝,就通俗的来说,就是始终只有一个副本,用以上方法就可以很好的解决数据不安全的问题,还可以实现同一个类中不同对象之间数据的共享性

注意事项

静态成员变量必须初始化,并且只能在类的外面进行初始化,在我们初识化的时候可以赋初值,也可以不要,如果我们没给他,赋初值的话,那么就会默认初始化为0,

静态成员函数

 在我们类的定义中,前面有static的成年函数,我们称之为静态成员函数,尽量乘以函数是属于所有类对象共享的成员函数,他不是单单只属于类中的某一个对象,近代成员函数的作用不是为了对象之间的沟通,而是为了处理类中的静态数据成员,静态成员函数的定义格式有以下几种

static 返回类型 静态成员函数名(参数表)

静态成员函数的调用

与静态成员函数相似,调用公有的成员函数的一般格式有以下几种

1、类名::静态成员函数名(实参表)

2、对象.静态成员函数(实参表)

3、对象指针 -> 静态成员函数(实参表)

一般来说静态程序函数是不会访问类中的非静态成员,如果有需要,近代成员函数就只能通过对象名来访问该对象的非静态成员

静态成员函数和非静态成员函数的主要区别就是非静态成员函数有this指针,而静态成员函数就没有  这就导致了静态成员函数可以直接访问本类中的所有静态数据成员,因为静态数据成员同样也是类的一部分,就可以直接访问,静态成员函数不访问类中的非静态成员

相关文章
|
10天前
|
C++
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
|
14天前
|
编译器 C语言 C++
【C++初阶(九)】C++模版(初阶)----函数模版与类模版
【C++初阶(九)】C++模版(初阶)----函数模版与类模版
18 0
|
24天前
|
NoSQL C++
c++中包含string成员的结构体拷贝导致的double free问题
c++中包含string成员的结构体拷贝导致的double free问题
8 0
|
25天前
|
存储 缓存 C++
C++链表常用的函数编写(增查删改)内附完整程序
C++链表常用的函数编写(增查删改)内附完整程序
|
27天前
|
存储 安全 编译器
【C++】类的六大默认成员函数及其特性(万字详解)
【C++】类的六大默认成员函数及其特性(万字详解)
35 3
|
30天前
|
安全 程序员 C++
【C++ 基本知识】现代C++内存管理:探究std::make_系列函数的力量
【C++ 基本知识】现代C++内存管理:探究std::make_系列函数的力量
101 0
|
30天前
|
设计模式 安全 C++
【C++ const 函数 的使用】C++ 中 const 成员函数与线程安全性:原理、案例与最佳实践
【C++ const 函数 的使用】C++ 中 const 成员函数与线程安全性:原理、案例与最佳实践
71 2
|
4天前
|
存储 编译器 C语言
c++的学习之路:5、类和对象(1)
c++的学习之路:5、类和对象(1)
19 0
|
4天前
|
C++
c++的学习之路:7、类和对象(3)
c++的学习之路:7、类和对象(3)
19 0
|
3天前
|
设计模式 Java C++
【C++高阶(八)】单例模式&特殊类的设计
【C++高阶(八)】单例模式&特殊类的设计