• C++ 类的静态成员详解【static】


    目录

     


    前言

    本文记录C++中 static 修饰类成员成为静态成员,其中包括静态成员类别、作用和程序演示。

    嫌文字啰嗦的可直接跳到最后的总结。


    一、类的静态成员

    1.static关键字

    (1)C++中 static 关键字意为静态,用于修饰类中的成员(包括变量和函数)。

    (2)用static修饰成员变量即为静态成员变量;用static修饰成员函数即为静态成员函数。

    (3)静态成员属于类本身,而不属于对象。

    2.静态成员变量

    (1)静态成员变量必须在类声明的外部初始化。

    (2)静态成员变量是在初始化时分配内存的,程序结束时释放内存。

    (3)静态成员变量可以通过类名或对象名来引用,非静态成员变量只能通过对象名引用。

    3.静态成员函数

    (1)静态成员函数中不可以定义 this、super 关键字。

    (2)静态成员函数只能访问静态成员,非静态成员函数既可访问静态成员也可访问非静态成员。

    (3)静态成员函数可以通过类名或对象名来引用,非静态成员函数只能通过对象名引用。

    二、程序样例

    1.程序演示

    代码如下(可仅在vs2017编辑器内显示不执行):

    1. #include
    2. using namespace std;
    3. class MyClass
    4. {
    5. public:
    6. int a = 0;
    7. static int b; // 类内声明 类外初始化(定义)
    8. //static int b = 0; // 静态成员变量类内初始化(定义)报错
    9. public:
    10. void fun()
    11. {
    12. cout << "fun()被调用了" << endl;
    13. cout << a << endl;
    14. cout << b << endl;
    15. int z1 = this->a;
    16. int z2 = this->b;
    17. };
    18. static void show()
    19. {
    20. cout << "show()被调用了" << endl;
    21. //cout << a << endl; // 静态成员函数访问非静态成员变量报错
    22. cout << b << endl;
    23. //int z1 = this->a; // this指针访问非静态成员变量报错
    24. //int z2 = this->b; // this指针访问静态成员变量报错
    25. };
    26. };
    27. int main()
    28. {
    29. MyClass mc;
    30. int x1 = mc.a;
    31. //int x2 = MyClass::a; // 类名调用非静态成员数据报错
    32. int y1 = mc.b;
    33. int y2 = MyClass::b;
    34. mc.fun();
    35. //MyClass::fun(); // 类名调用非静态函数报错
    36. mc.show();
    37. MyClass::show();
    38. system("pause");
    39. return 0;
    40. }

    2.程序截图

    程序截图如下(vs2017编辑器内显示图中红色波浪线为报错):


     总结

    静态成员函数非静态成员函数
    所有对象共享YesYes
    隐含this指针NoYes
    访问非静态成员变量(函数)NoYes
    访问静态成员变量(函数)YesYes
    通过类名直接调用YesNo
    通过对象名直接调用YesYes
  • 相关阅读:
    「Python实用秘技06」逐行监听Python程序的内存消耗
    dbeaver下载镜像站
    python+ipc+改造过的插线板写一个控制ipc疯狂上下电的脚本
    QT应用主窗口——富文本处理
    python多线程与多进程
    Python使用Base64编码
    elasticsearch——jdk版本问题,非docker版 直接使用安装包。
    深入linux内核架构--内存管理
    Nginx多IP端口路由配置
    基于Java实现的图片搜索系统
  • 原文地址:https://blog.csdn.net/Gary_ghw/article/details/128100005