当前位置: 首页 > news >正文

【C++】静态成员函数 ( 静态成员函数概念 | 静态成员函数声明 | 静态成员函数访问 | 静态成员函数只能访问静态成员 )

文章目录

  • 一、静态成员函数简介
    • 1、静态成员函数概念
    • 2、静态成员函数声明
    • 3、静态成员函数访问
    • 4、静态成员函数只能访问静态成员
  • 二、代码示例 - 静态成员函数





一、静态成员函数简介




1、静态成员函数概念


静态成员函数归属 : 在 C++ 类中 , 静态成员函数 是一种 特殊的函数 , 该函数属于类 , 而不是属于 类实例对象 ;

静态成员函数调用不依赖于对象 : 即使 没有创建 类 的 实例对象 , 也可以 通过 类名:: 调用 类中定义的 静态成员函数 ;


静态成员函数作用 : 静态成员函数 通常用于 执行与类本身相关的操作 , 执行该函数 不涉及到 类实例对象中的信息 , 也不能在 静态成员函数 中访问 普通的 成员变量 和 成员函数 ;


2、静态成员函数声明


静态成员函数声明 : 使用 static 关键字 修饰 成员函数 , 就可以将 普通的成员函数 转为 静态成员函数 ;

如 : 下面的 void fun() 普通成员函数 , 在 函数之前添加 static 关键字 , static void fun() 就变成了 静态成员函数 ;

class Student
{
public:static void fun(){cout << "静态成员函数被调用 : number = " << number << endl;}
};

3、静态成员函数访问


静态成员函数访问 :

  • 使用 类名 和 域操作符 访问 :
	// 通过 类名:: 调用 静态成员函数Student::fun();
  • 使用 对象 访问 :
	// 通过 对象. 调用 静态成员函数s.fun();

4、静态成员函数只能访问静态成员


静态成员函数内容要求 : 静态成员函数 只能访问

  • 静态成员变量
  • 其他静态成员函数

静态成员函数 不能访问 非静态成员变量 或 非静态成员函数 ,

普通的 成员变量 和 成员函数 , 需要 通过 类 的 实例对象 来访问 , 需要 依托于 对象才能存在 ,

而 静态成员函数 可以在 不创建 实例对象的前提下被调用 , 因此 静态成员函数中 不能访问 非静态成员 ;


如果在静态成员函数中 , 访问非静态成员 , 会报如下错误 :

1>------ 已启动生成: 项目: HelloWorld, 配置: Debug Win32 ------
1>Hello.cpp
1>Y:\002_WorkSpace\002_VS\HelloWorld\HelloWorld\Hello.cpp(22,3): error C2597: 对非静态成员“Student::m_age”的非法引用
1>已完成生成项目“HelloWorld.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0==========

在这里插入图片描述





二、代码示例 - 静态成员函数



下面的代码 , 是在 之前 的 静态成员变量 示例代码的基础上 进行的 ;

在 Student 类中定义静态成员函数 , 使用 static 关键字修饰函数 ;

注意 : 不要在 静态函数中 访问 非静态成员 , 否则会报错 " 对非静态成员“Student::m_age”的非法引用 " ;

	static void fun(){// 静态成员函数 中 访问非静态成员会报错// error C2597: 对非静态成员“Student::m_age”的非法引用//m_age = 10;cout << "静态成员函数被调用 : number = " << number << endl;}

访问 类的 静态成员函数 时 , 可以使用 类名:: 调用 静态成员函数 ;

	// 通过 类名:: 调用 静态成员函数Student::fun();

还可以使用 对象. 调用 静态成员函数 ;

	// 通过 对象. 调用 静态成员函数s.fun();

代码示例 :

#include "iostream"
using namespace std;class Student
{
public:// 带参构造函数Student(int age, int height){m_age = age;m_height = height;cout << "执行 Student 的构造函数" << endl;}~Student(){cout << "执行 Student 的析构函数" << endl;}static void fun(){// 静态成员函数 中 访问非静态成员会报错// error C2597: 对非静态成员“Student::m_age”的非法引用//m_age = 10;cout << "静态成员函数被调用 : number = " << number << endl;}public:int m_age;		// 年龄int m_height;	// 身高// 在类内部定义静态成员static int number;
};// 在类外部初始化静态成员变量  
int Student::number = 1;int main() {// I. 静态成员变量// 使用 域操作符 访问 类静态成员变量// 类名::静态成员变量名cout << "Student::number = " << Student::number << endl;// 在函数中为 类 静态成员变量 赋值Student::number = 2;// 创建 Student 类型对象Student s(10, 150);// 使用 对象 访问 类静态成员变量// 对象名称.静态成员变量名cout << "s.number = " << s.number << endl;// II. 静态成员函数// 通过 类名:: 调用 静态成员函数Student::fun();// 通过 对象. 调用 静态成员函数s.fun();// 控制台暂停 , 按任意键继续向后执行system("pause");return 0;
}

执行结果 :

Student::number = 1
执行 Student 的构造函数
s.number = 2
静态成员函数被调用 : number = 2
静态成员函数被调用 : number = 2
请按任意键继续. . .

在这里插入图片描述

相关文章:

【C++】静态成员函数 ( 静态成员函数概念 | 静态成员函数声明 | 静态成员函数访问 | 静态成员函数只能访问静态成员 )

文章目录 一、静态成员函数简介1、静态成员函数概念2、静态成员函数声明3、静态成员函数访问4、静态成员函数只能访问静态成员 二、代码示例 - 静态成员函数 一、静态成员函数简介 1、静态成员函数概念 静态成员函数归属 : 在 C 类中 , 静态成员函数 是一种 特殊的函数 , 该函数…...

基于若依ruoyi-nbcio增加flowable流程待办消息的提醒,并提供右上角的红字数字提醒(三)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 1、上一节说到RedisReceiver &#xff0c;这里有调用了NbcioRedisListener自定义业务监听&#xff0c;如下…...

用友第五届开发者大赛初赛晋级公示,复赛火热进行中!

用友第五届开发者大赛初赛晋级公示&#xff0c;复赛火热进行中&#xff01; 自7月13日鸣锣揭幕&#xff0c;9月6日各赛道作品初评工作完成&#xff0c;历时近两月&#xff0c;用友第五届企业云服务开发者大赛初赛阶段顺利落下帷幕。作为备受各界开发者关注的赛事&#xff0c;本…...

SSL证书如何做到保障网站安全?

当网站显示不安全时&#xff0c;用户会在头脑中产生该网站是否合法的疑问&#xff0c;如果是购物网站或者购物商城&#xff0c;那意味着可能会损失大部分的用户。而SSL证书能有效保障网站的安全性&#xff0c;轻松解决网站不被用户信任的问题。那么&#xff0c;SSL证书究竟是如…...

C# Onnx Yolov8 Detect Poker 扑克牌识别

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System…...

想要精通算法和SQL的成长之路 - 最长等差数列

想要精通算法和SQL的成长之路 - 最长等差数列 前言一. 最长等差数列 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 最长等差数列 原题链接 思路&#xff1a; 我们假设dp[i][j] 为&#xff1a;以num[i]为结尾&#xff0c;以j为公差的最长等差子序列的长度。由此可知&a…...

【简单的自动曝光】python实现-附ChatGPT解析

1.题目 一个图像有 n 个像素点,存储在一个长度为 n 的数组 img 里, 每个像素点的取值范围[0,255] 的正整数。 请你给图像每个像素点值,加上一个整数 k (可以是负数),得到新图 newImg , 使得新图newImg 的所有像素平均值最接近中位值 128。 请输出这个整数 k。 输入描述 n …...

网工内推 | 运维工程师,CCNP认证优先,周末双休,多次调薪机会

01 驻场运维 职责描述&#xff1a; 1、驻场某大型汽车整车厂&#xff0c;配合客户完成网络相关&#xff08;路由交换&#xff09;的项目。 2、按照客户要求&#xff0c;与项目组配合共同完成项目前期调研&#xff0c;设计&#xff0c;规划&#xff0c;项目中期调试测试&#…...

LeetCode 1337. The K Weakest Rows in a Matrix【数组,二分,堆,快速选择,排序】1224

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

如何使用Spring提供的Retry

0、本例中使用的是 springboot-2.0.4.RELEASE&#xff0c;jdk1.8 1、导包。需要注意版本。2.0.0需要spring6和jdk17 <dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</artifactId><version>1.3.4<…...

【ONE·Linux || 进程间通信】

总言 进程间通信&#xff1a;简述进程间通信&#xff0c;介绍一些通信方式&#xff0c;管道通信&#xff08;匿名、名命&#xff09;、共享内存等。 文章目录 总言1、进程间通信简述2、管道2.1、简介2.2、匿名管道2.2.1、匿名管道的原理2.2.2、编码理解&#xff1a;用fork来共…...

207.Flink(二):架构及核心概念,flink从各种数据源读取数据,各种算子转化数据,将数据推送到各数据源

一、Flink架构及核心概念 1.系统架构 JobMaster是JobManager中最核心的组件,负责处理单独的作业(Job)。一个job对应一个jobManager 2.并行度 (1)并行度(Parallelism)概念 一个特定算子的子任务(subtask)的个数被称之为其并行度(parallelism)。这样,包含并行子任…...

debian终端快捷键设置

为了方便使用图形化debian&#xff0c;快捷调出shell终端是提升工作学习效率的最重要的一步。 1.首先点击右上角&#xff0c;选择设置 2.点击键盘&#xff0c;选择快捷键&#xff0c;并创建自定义快捷键 3.点击添加快捷键 4.根据图中提示创建快捷键 Name: Terminal Command…...

原生ajax

什么是Ajax Asynchronous JavaScript and xml 异步的 js 和 xml(数据承载方式) &#xff0c;本质&#xff1a;使用js提供的异步对象XMLHttpRequest 异步的向服务器提交请求&#xff0c;并且接受服务器响应回来的数据。 使用ajax 1.创建异步对象 var xhrnew XMLHttp…...

面试题库(五):并发编程

多线程类的使用 java线程同步有哪些方法、各自的优缺点synchronized 和ReentrantLock区别,可重入锁是什么?threadlocal有什么用Java中创建线程有几种方式?分别是? 当主线程执行结束后,子线程还会继续执行下去吗?JUC中有哪些常用的集合?(项目中用到的)CopyOnWriteArray…...

Android FileProvider笔记

一、FileProvider是什么 通过FileProvider.getUriForFile(NonNull Context context, NonNull String authority, NonNull File file)方法获得一个有临时权限的Uri给客户端用来访问本APP文件。 当然看FileProvider类的注释更加详细 二、代码示例 <providerandroid:name&q…...

华为云云耀云服务器L实例评测 |云服务器选购

华为云耀云服务器 L 实例是一款轻量级云服务器&#xff0c;开通选择实例即可立刻使用&#xff0c;不需要用户再对服务器进行基础配置。新用户还有专享优惠&#xff0c;2 核心 2G 内存 3M 带宽的服务器只要 89 元/年&#xff0c;可以点击华为云云耀云服务器 L 实例购买地址去购买…...

2023-09-22 LeetCode每日一题(将钱分给最多的儿童)

2023-09-22每日一题 一、题目编号 2591. 将钱分给最多的儿童二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数 money &#xff0c;表示你总共有的钱数&#xff08;单位为美元&#xff09;和另一个整数 children &#xff0c;表示你要将钱分配给多少个儿童。 你…...

功能测试的重要性

前言 在软件开发领域&#xff0c;功能测试是确保软件质量的关键步骤之一。正如其名称所示&#xff0c;功能测试是验证软件产品是否具有其描述的功能和符合预期结果的过程。这种类型的测试非常重要&#xff0c;因为它不仅可以帮助团队检测潜在的缺陷并提高软件品质&#xff0c;…...

《Linux高性能服务器编程》--高级I/O函数

目录 1--Pipe() 2--dup() 和 dup2() 3--readv() 和 writev() 4--sendfile() 5--mmap() 和 munmap() 6--spice() 7--tea() 8--fcntl() 1--Pipe() #include <unistd.h> int pipe(int fd[2]); // 成功返回0&#xff0c;失败返回-1 pipe() 函数可用于创建一个管道&a…...

LeagueAkari终极指南:智能游戏辅助工具快速上手与深度配置

LeagueAkari终极指南&#xff1a;智能游戏辅助工具快速上手与深度配置 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾在…...

ECharts Geo Regions 进阶:自定义地图省份边界与区域样式的实战技巧

1. 理解ECharts中的geo.regions属性 ECharts作为一款强大的数据可视化工具&#xff0c;其地图组件在展示地理信息数据时尤为出色。在实际项目中&#xff0c;我们经常需要对特定省份或区域进行个性化样式设置&#xff0c;这时候geo.regions属性就派上用场了。这个属性允许我们对…...

跨境云手机适用于哪些场景

跨境云手机适用于多种场景&#xff0c;能为不同用户群体带来便利与价值&#xff0c;对于跨境电商从业者而言&#xff0c;可用于多账号管理与运营&#xff0c;通过在云端虚拟出不同地区、不同配置的手机环境&#xff0c;实现多个店铺账号的同时登录和独立操作&#xff0c;有效规…...

隐私保护方案:OpenClaw+GLM-4.7-Flash本地化处理敏感数据

隐私保护方案&#xff1a;OpenClawGLM-4.7-Flash本地化处理敏感数据 1. 为什么需要本地化处理敏感数据&#xff1f; 去年我帮一位做财务咨询的朋友处理季度报表时&#xff0c;遇到了一个棘手问题。他需要分析上百份包含客户银行流水、身份证号等信息的Excel文件&#xff0c;但…...

Uvicorn连接池配置:优化数据库连接性能的完整指南

Uvicorn连接池配置&#xff1a;优化数据库连接性能的完整指南 【免费下载链接】uvicorn An ASGI web server, for Python. &#x1f984; 项目地址: https://gitcode.com/GitHub_Trending/uv/uvicorn Uvicorn作为一款高性能的ASGI web服务器&#xff0c;在Python Web应用…...

League-Toolkit:英雄联盟智能辅助工具的效率提升之道

League-Toolkit&#xff1a;英雄联盟智能辅助工具的效率提升之道 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolkit是…...

免费获取Cherry MX键帽3D模型:打造个性化机械键盘的终极指南

免费获取Cherry MX键帽3D模型&#xff1a;打造个性化机械键盘的终极指南 【免费下载链接】cherry-mx-keycaps 3D models of Chery MX keycaps 项目地址: https://gitcode.com/gh_mirrors/ch/cherry-mx-keycaps 你是否厌倦了千篇一律的键盘外观&#xff1f;想要拥有独一无…...

别再手动调坐标轴了!Excel两列数据一键生成折线图的正确姿势(附散点图对比)

Excel两列数据可视化&#xff1a;折线图与散点图的精准选择与高效操作 每次月度汇报前&#xff0c;你是否也经历过这样的场景&#xff1f;面对两列关键业务数据&#xff0c;明明只是简单画个趋势图&#xff0c;却在调整坐标轴上耗费半小时——选错图表类型导致横纵坐标错位&…...

告别“金鱼记忆”:Hologres + Mem0,为大模型打造企业级长记忆引擎

想象一下这个场景&#xff1a;一位用户在周一联系某电商平台的智能客服&#xff0c;咨询了一款高端相机的详细参数和优惠活动&#xff0c;并明确表示“我倾向于购买A品牌”。客服助手热情地解答了问题。到了周三&#xff0c;这位用户再次联系客服&#xff0c;想了解这款相机的配…...

如何快速配置HomeAssistant格力空调本地控制组件:完整操作指南

如何快速配置HomeAssistant格力空调本地控制组件&#xff1a;完整操作指南 【免费下载链接】HomeAssistant-GreeClimateComponent Custom Gree climate component written in Python3 for Home Assistant. Controls ACs supporting the Gree protocol. 项目地址: https://git…...