码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++ 类的静态成员详解【static】


    目录

     

    前言

    一、类的静态成员

    1.static关键字

    2.静态成员变量

    3.静态成员函数

    二、程序样例

    1.程序演示

    2.程序截图

    总结


    前言

    本文记录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
  • 相关阅读:
    mysql8.x 解压版安装过程中出现计算机中丢失vcruntime140_1.dll
    Apache Doris系列之:深入认识实时分析型数据库Apache Doris
    Vue.js+SpringBoot开发木马文件检测系统
    springboot+springsecurity+jwt+elementui图书管理系统
    MyBatis 参数传递
    数据结构 栈和队列上
    【微信小程序】小程序代码基本组成结构
    Go Gin Gorm Casbin权限管理实现 - 3. 实现Gin鉴权中间件
    linux学习实操计划0102-查看系统配置和版本
    oracle临时表
  • 原文地址:https://blog.csdn.net/Gary_ghw/article/details/128100005
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号