当前位置: 首页 > 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…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...