网站首页 > 技术文章 正文
学习了静态成员变量和静态成员函数,我们了解到static关键字修饰的成员变量和成员函数,就属于“静态”类型。就是属于当前类的属性。
所以,当我们定义一个C++类的时候,静态成员就已经存在,它是属于这个类。所以,就可以直接通过类名来访问静态成员。
当“编译程序”的时候,它们就存在的,所以编译程序完成之后,不用定义类对象,就可以访问类的静态成员变量和静态成员函数,程序测试如下:
可以看到,在main()函数中没有定义任何对象,直接通过student类名访问静态的print()函数,而且,在print()函数中访问静态的成员变量。
所以,对于静态成员变量和静态成员函数,它们是属于一个类的,那么编译程序的时候,就对类进行了编译处理,所以,编译完程序之后,就可以使用类名和作用域运算符“::”来调用。
而对于非静态的成员变量和成员函数,是由一个对象来确定的,所以,必须在定义对象之后,才能够调用它们。
静态成员变量和静态成员函数,都是属于类的,可以使用类名和作用域运算符“::”来调用它们。当定义了类对象之后,也可以如同普通的成员变量和成员函数一样,使用对象和点运算符“.”来调用它们。
我们可以以“物体出现的时间先后顺序”来推理理解:静态和非静态成员之间的调用关系。根据,C++程序被编译之后,类先被编译出来,然后,才可以使用类来定义对象。所以,类先出现在对象之前。
假设现在只编译了类,不定义对象,所以,就通过类名来操作静态成员变量静态成员函数。如果此时,在静态成员函数中操作了非静态的成员变量,则出错,因为,非静态的成员变量是属于一个对象的,而此时,我们还没有使用类来定义对象,没有任何一个对象存在,所以,我们定义的静态成员函数,不能够调用非静态的成员变量和成员函数。
如果使用类来定义了一个对象,那么,这个对象的非静态成员变量和成员函数就产生了。而且,在编译了类之后,类的静态成员变量和静态成员函数已经生成,所以,可以使用对象的非静态成员函数来操作静态的成员变量和静态的成员函数。
读者要仔细分析,掌握好每一个知识点,然后,自己总结出对该知识点的理解。自己总结出来的知识,理解才深刻,才是自己掌握的知识。
- 上一篇: 面试官:谈谈你对Java内部类的理解?
- 下一篇: 函数参数传递方式的分析
猜你喜欢
- 2025-08-06 中等生如何学好初二数学函数篇
- 2025-08-06 C#构造函数
- 2025-08-06 初中数学:一次函数学习要点和方法
- 2025-08-06 仓颉编程语言基础-数据类型—结构类型
- 2025-08-06 C++实现委托机制
- 2025-08-06 初中VS高中三角函数:从"固定镜头"到"360°全景",数学视野升级
- 2025-08-06 一文讲透PLC中Static和Temp变量的区别
- 2025-08-06 类三剑客:一招修改所有对象!类方法与静态方法的核心区别!
- 2025-05-24 高中数学解题分析方法及知识点
- 2025-05-24 C/C++编程笔记:无法在C++中重载的函数,六种方式
- 最近发表
-
- count(*)、count1(1)、count(主键)、count(字段) 哪个更快?
- 深入探索 Spring Boot3 中 MyBatis 的 association 标签用法
- js异步操作 Promise fetch API 带来的网络请求变革—仙盟创梦IDE
- HTTP状态码超详细说明_http 状态码有哪些
- 聊聊跨域的原理与解决方法_跨域解决方案及原理
- 告别懵圈!产品新人的接口文档轻松入门指南
- 在Javaweb中实现发送简单邮件_java web发布
- 优化必备基础:Oracle中常见的三种表连接方式
- Oracle常用工具使用 - AWR_oracle工具有哪些
- 搭载USB 3.1接口:msi 微星 发布 990FXA Gaming 游戏主板
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)