Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【C++】静态成员函数 ( 静态成员函数概念 | 静态成员函数声明 | 静态成员函数访问 | 静态成员函数只能访问静态成员 )

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

作者头像
韩曙亮
发布于 2023-10-15 09:16:34
发布于 2023-10-15 09:16:34
2.3K00
代码可运行
举报
运行总次数:0
代码可运行

一、静态成员函数简介

1、静态成员函数概念

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

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

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

2、静态成员函数声明

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Student
{
public:
	static void fun()
	{
		cout << "静态成员函数被调用 : number = " << number << endl;
	}
};

3、静态成员函数访问

静态成员函数访问 :

  • 使用 类名 和 域操作符 访问 :
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	// 通过 类名:: 调用 静态成员函数
	Student::fun();
  • 使用 对象 访问 :
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	// 通过 对象. 调用 静态成员函数
	s.fun();

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

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

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

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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”的非法引用 " ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	static void fun()
	{
		// 静态成员函数 中 访问非静态成员会报错
		// error C2597: 对非静态成员“Student::m_age”的非法引用
		//m_age = 10;
		cout << "静态成员函数被调用 : number = " << number << endl;
	}

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	// 通过 类名:: 调用 静态成员函数
	Student::fun();

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	// 通过 对象. 调用 静态成员函数
	s.fun();

代码示例 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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;
}

执行结果 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Student::number = 1
执行 Student 的构造函数
s.number = 2
静态成员函数被调用 : number = 2
静态成员函数被调用 : number = 2
请按任意键继续. . .
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MRCTF部分wp
第一次出题,可能水平不是很高,如果给师傅带来了不是很好的做题体验,还请师傅多多包涵~
回天
2023/04/25
3970
MRCTF部分wp
DozerCTF2021 Misc wp
从给的图片里能分离出来一个gif和一个png,gif一共七帧,能分离出来七个二维码
回天
2023/04/25
2610
DozerCTF2021 Misc wp
2023铁三第一赛区分区赛
所以写个python脚本循环1669次依次读取文件字节并写入到同一个png文件进行整合即可,脚本如下
故里[TRUE]
2023/04/21
2670
2023铁三第一赛区分区赛
安恒四月春季战——DASCTF部分wp
附件大小将近1G,既然是签到题,那么题目肯定很简单,1G的文件下载的很慢,所以肯定不会是把整个附件下载完,所以本题涉及到的考点为断点下载,即下载几秒钟后停止下载,将下载得到的部分文件用winhex查看,即可在文件开头发现flag
回天
2023/04/25
9370
安恒四月春季战——DASCTF部分wp
WHUCTF部分wp
签到题,下载附件得到一个.git的文件夹,正常情况下文件夹被隐藏,显示隐藏后可以看到,百度可知这个.git文件夹是创建git仓库时部署在本地的一个类似目录的东西
回天
2023/04/25
3930
WHUCTF部分wp
蓝帽杯决赛misc部分wp
根据hint找到pdf中对应三个位置的00字符串长度,分别为1919/7753/34,拼起来转成字符串,得到压缩包密码rmrf,解压得到
回天
2023/04/25
2730
蓝帽杯决赛misc部分wp
WUST-CTF2020部分wp
下载附件得到一个txt文件,看起来是空白的,全选后可以发现其中有长短不一的内容,而且只有两种长度
回天
2023/04/25
4650
WUST-CTF2020部分wp
WMCTF2020-MISC-Dalabengba详解
整道题目的背景为达拉崩吧这首歌,在出题之前就想弄一道rpg的游戏题,苦于没有什么好的剧情构思,于是想到了达拉崩吧,非常完美的勇者斗恶龙剧情(手动滑稽),游戏中一些地图的设计和游戏剧情的构思都较完整的还原了达拉崩吧,所以其实在做题中没什么思路的时候可以去看看歌词对照一下2333
回天
2023/04/25
5380
WMCTF2020-MISC-Dalabengba详解
buuctf_crypto部分wp(6.21更)
题目附件中给出的文档明确指出本题的考点,并且给了一个码表,我们需要对照给的密文和码表还原出原来的base64密文才能进行解密
回天
2023/04/25
4590
buuctf_crypto部分wp(6.21更)
BUUCTF-misc题
发现是一个base64编码的图片 用在线网站解码https://the-x.cn/base64/
R0A1NG
2022/02/19
2.1K0
BUUCTF-misc题
[2020_hgame_Misc_week3] 日常
,包里有两张一样的图和一首歌,看图片命名其中一个为 Blind.png 另一个为 Origin_pixivArtwork75992170.png 可知其中一幅图来自pivix的原图,而另一幅图则是经过一些处理的图
回天
2023/04/25
4910
[2020_hgame_Misc_week3] 日常
[DASCTF 2020圣诞赛]Misc部分wp
题目下载下来是一个png图片,里面全是二维码,二维码内容大概就是马老师经典语句全文。
山深有杏
2024/01/30
1950
[DASCTF 2020圣诞赛]Misc部分wp
De1CTF Misc wp
De1CTF这次队里师傅都很出力很牛逼,最后成绩也很不错,俺被直接带飞,这里对MISC做一个汇总wp,部分wp来自于队友。
L1near
2022/11/11
9730
De1CTF Misc wp
ACTF2020部分wp
再看绕过md5,由于是===,所以无法用0e开头的字符串绕过,但是可以用数组绕过,参考文章
回天
2023/04/25
3830
ACTF2020部分wp
jarvisoj-Crypto
jarvisoj-Crypto Medium RSA 题目到手后给了一个公钥和一个密文 我们对这个公钥提取信息: 可以得到 N = 0xC2636AE5C3D8E43FFB97AB09028F1AAC
安恒网络空间安全讲武堂
2018/02/06
4.6K0
jarvisoj-Crypto
HSC-1th WP MISC
此处根据CRC校验,该图片于linux系统下或于手机下无法查看,Windows系统下正常,因为Windows系统忽略了CRC校验。
中龙技术
2022/09/29
6200
HSC-1th WP MISC
De1CTF_Misc部分wp
下载附件得到一个流量包,导出http对象→按照大小顺序排序,可以在最下面发现七个php文件
回天
2023/04/25
4510
De1CTF_Misc部分wp
CTF之misc杂项解题技巧总结(1)——隐写术
NTFS是微软Windows NT内核的系列操作系统支持的、一个特别为网络和磁盘配额、文件加密等管理安全特性设计的磁盘格式。NTFS比FAT文件系统更稳定,更安全,功能也更为强大。
用户10781703
2023/12/23
3K0
MISC基础题-攻防世界
引言:这里是我做的攻防世界-misc-基础题的一些writeup,希望能够大家一些参考,部分解题思路借鉴了其他博主,如果哪些地方有问题或更好的思路,可以一起探讨。 所用环境以及做题思路只在当时写下writeup时适用,若之后做出改动可与我联系,做出相应更改。
Baige
2022/03/07
1.7K0
MISC基础题-攻防世界
如何在CTF中少走弯路(基础篇)
自己并不是专业的赛棍也没有打过很多比赛,这篇文章是自己在CTF中对于杂项这块知识学习的小结,希望可以对初入CTF的同学有所帮助,在CTF中少走弯路从而更快的提升自己。 一、流量分析篇 通常比赛中会提供一个包含流量数据的 PCAP 文件,有时候也会需要选手们先进行修复或重构传输文件后,再进行分析。 PCAP 这一块作为重点考察方向,复杂的地方在于数据包里充满着大量无关的流量信息,因此如何分类和过滤数据是参赛者需要完成的工作。 概括来讲在比赛中的流量分析有以下三个方向: 1、流量包修复 2、协议分析 3、数据提
FB客服
2018/04/17
8.2K1
如何在CTF中少走弯路(基础篇)
相关推荐
MRCTF部分wp
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验