解释 C++ 中的静态成员变量和静态成员函数。

解释 C++ 中的静态成员变量和静态成员函数。

在C++中,静态成员变量和静态成员函数都与类本身相关联,而不是与类的各个实例相关联。这意味着无论创建了多少个类的对象,静态成员变量和静态成员函数的存储空间只分配一次,并且它们可以被所有的类对象共享。

静态成员变量(Static Member Variables):
静态成员变量是属于类本身的变量,而不是属于类的任何特定实例。它们在类的所有实例之间共享。静态成员变量由 static 关键字声明,并且必须在类的外部进行定义和初始化。静态成员变量的访问方式是通过类名加作用域解析运算符(::)来访问。

class MyClass {
public:static int count; // 声明静态成员变量MyClass() {count++; // 每次创建对象时递增静态成员变量}
};int MyClass::count = 0; // 初始化静态成员变量int main() {MyClass obj1;MyClass obj2;std::cout << "Count: " << MyClass::count << std::endl; // 访问静态成员变量return 0;
}

静态成员函数(Static Member Functions):
静态成员函数是属于类本身的函数,而不是属于类的任何特定实例。它们不操作特定对象的数据,因此在函数体内无法直接访问非静态成员变量或非静态成员函数。静态成员函数由 static 关键字声明,并且可以直接通过类名来调用。

class MyClass {
public:static void staticFunction() {std::cout << "Static function called" << std::endl;}
};int main() {MyClass::staticFunction(); // 调用静态成员函数return 0;
}

特点:
共享性:静态成员变量和静态成员函数在所有类对象之间共享,可以用于跟踪类的实例数量或提供全局的实用功能。

无需实例化对象:可以直接通过类名来访问静态成员变量和静态成员函数,而无需创建类的对象。

与普通成员函数的区别:静态成员函数没有 this 指针,因此无法访问非静态成员变量或非静态成员函数。而普通成员函数可以访问类的所有成员。

静态成员变量的初始化:静态成员变量必须在类的外部进行定义和初始化,且只能初始化一次。
静态成员变量和静态成员函数是C++中的特殊成员,与类的实例化对象无关,而是与类本身相关联。下面详细解释它们的特性:

静态成员变量(Static Member Variables):
声明:静态成员变量使用 static 关键字进行声明,它在类的所有实例之间共享,只有一个副本存在于内存中。

定义和初始化:静态成员变量必须在类的外部进行定义和初始化,通常在类的定义文件中进行。静态成员变量的初始化只能在类的定义文件中进行一次。

访问权限:静态成员变量可以是公有的、私有的或受保护的,其访问权限遵循相应的访问修饰符。

访问方式:可以通过类名加作用域解析运算符(::)或者通过对象名进行访问。但推荐使用类名来访问,因为静态成员变量属于类而不是对象。

示例:

class MyClass {
public:static int staticVar; // 声明静态成员变量
};// 定义并初始化静态成员变量
int MyClass::staticVar = 0;

静态成员函数(Static Member Functions):
声明:静态成员函数使用 static 关键字进行声明,它不与类的实例相关联,而是作为类的一个整体,可以直接通过类名调用。

访问权限:静态成员函数可以是公有的、私有的或受保护的,其访问权限遵循相应的访问修饰符。

访问限制:由于静态成员函数不具有 this 指针,因此无法直接访问非静态成员变量和非静态成员函数。但它们可以访问其他静态成员变量和静态成员函数。

示例:

class MyClass {
public:static void staticFunction() {// 静态成员函数的实现}
};

使用场景:
共享数据:静态成员变量常用于跟踪类的所有实例之间共享的数据。

全局功能:静态成员函数通常用于提供与类相关的全局功能,而不需要创建类的实例。

工厂模式:静态成员函数可以用于创建类的实例,从而实现工厂模式。

单例模式:静态成员变量和静态成员函数结合使用时,可以实现单例模式,确保类只有一个实例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/691740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bert基础(二)--多头注意力

多头注意力 顾名思义&#xff0c;多头注意力是指我们可以使用多个注意力头&#xff0c;而不是只用一个。也就是说&#xff0c;我们可以应用在上篇中学习的计算注意力矩阵Z的方法&#xff0c;来求得多个注意力矩阵。让我们通过一个例子来理解多头注意力层的作用。以All is well…

在本地计算机上运行Python程序

在本地计算机上运行Python程序的详细步骤&#xff1a; 第一步&#xff1a;安装Python解释器 Python解释器是运行Python程序所必需的。你可以从Python的官方网站&#xff08;https://www.python.org/downloads/&#xff09;下载最新版本的Python解释器。下载完成后&#xff0c…

linux监控系统资源命令

当前CPU内核版本 [rootVM-12-12-centos ~]# cat /proc/version Linux version 3.10.0-1160.11.1.el7.x86_64 (mockbuildkbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Fri Dec 18 16:34:56 UTC 2020 当前系统版本 [rootVM-12-1…

Python六级考试笔记

Python六级考试笔记【源源老师】 六级标准 一、 掌握文件操作及数据格式化。 二、 掌握数据可视化操作。 三、 理解类与对象的概念&#xff0c;初步掌握类与对象的使用。 四、 掌握SQLite数据库基础编程。 五、 掌握简单的使用tkinter的GUI设计。 ​ 1. 文件操作 &#xff0…

3、安装插件

以下插件请按需安装 Mask Passwords 使用此插件可以将在console中出现的password加密&#xff0c;以防止密码泄露。 Job Import Plugin 支持从其他的Jenkins上远程导入job Extended E-mail Notification 在job构建后发送邮件 Python Adds the ability to execute python scrip…

2024面试offer收割宝典百度篇

1.JAVA 中的几种基本数据类型是什么,各自占用多少字节。 byte: 占用 1 个字节(8位),取值范围是-128到127。 short:占用 2 个字节(16位),取值范围是-32,768到32,767。int : 占用 4 个字节(32位),取值范围是 2^{31} (-2,147,483,648) 到 2^{31-1} (2,147,483,647)。 l…

虚拟机 安装 centos7 带桌面

虚拟机 安装 centos7 流程 https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x86_64/ CentOS-7-x86_64-DVD-2009.iso vmware 安装 centos7 的时候&#xff0c; 如果 不是 选择的 稍后 安装操作系统 &#xff0c; 会不让你选择配置选项&#xff0c;自动帮你把系统…

技术选型指南:Oracle、SQL Server还是DB2?

Oracle vs SQL Server vs DB2 - 选哪个好&#xff1f; 在企业级数据管理领域&#xff0c;常用的几个选择有Oracle、SQL Server和DB2。 首先&#xff0c;我们从以下几个方面做一下对比&#xff1a; 1. 性能和稳定性&#xff1a; Oracle: Oracle就像是那种精密的瑞士手表&…

面试官:如何设计幂等性接口

什么是幂等性&#xff1f; 所谓幂等性&#xff0c;就是一次操作和多次操作同一个资源&#xff0c;所产生的影响均与一次操作的影响相同。 "幂等&#xff08;idempotent、idempotence&#xff09;是一个数学与计算机学概念&#xff0c;常见于抽象代数中。 幂等函数&…

Jenkins配置node节点

1、添加节点 2、配置node主机的java环境 注意&#xff0c;jdk的位置和版本要和master保持一致 sudo apt-get update sudo apt-get install openjdk-8-jre vim /etc/enviroment写入&#xff1a;export JAVA_HOME/usr/lib/jvm/openjdk-8-jre 按wq!退出 再输入&#xff1a;s…

[office] excel表格如何设置取整数 #知识分享#其他

excel表格如何设置取整数 Excel中有很多小时都需要取整数&#xff0c;小数具体该如何取整呢?下面是由小编分享的excel中取整数的教程&#xff0c;欢迎大家来到学习Excel表格。 excel表格中设置取整数的教程 取整数步骤1&#xff1a;如图所示&#xff0c;表格中有几组小数&…

记一次 Flink 作业启动缓慢

记一次 Flink 作业启动缓慢 背景 应用发现&#xff0c;Hadoop集群的hdfs较之前更加缓慢&#xff0c;且离线ELT任务也以前晚半个多小时才能跑完。此前一直没有找到突破口所以没有管他&#xff0c;推测应该重启一下Hadoop集群就可以了。今天突然要重启一个Flink作业&#xff0c…

【工具类】非 sudo 运行 docker

非 root 运行 docker 命令 sudo groupadd docker sudo usermod -aG docker $USER newgrp docker sudo chown root:docker /var/run/docker.sock sudo chown "$USER":"$USER" /home/"$USER"/.docker -R sudo chmod grwx "$HOME/.docker&quo…

【git 使用】git 中head、工作树、和索引分别是什么,有什么关系和区别

HEAD 定义&#xff1a;HEAD 是指向当前所在分支&#xff08;或者是某个特定的提交&#xff09;的指针&#xff0c;它表示当前工作目录正在处于哪个提交或分支上。作用&#xff1a;HEAD 指示了当前工作目录的状态&#xff0c;可以通过 HEAD 来确定当前处于哪个分支上&#xff0…

OkHttp Retrofit HttpClient之间的区别

OkHttp、Retrofit 和 HttpClient 是三个不同的 HTTP 客户端库&#xff0c;它们各自有不同的特点和用途。下面是它们之间的主要区别&#xff1a; 1. **OkHttp**&#xff1a; - OkHttp 是一个高性能的 HTTP 和 HTTP/2 客户端&#xff0c;由 Square 公司开发。 - 它…

【Java大数据期末】银行管理系统(MySQL数据库)

诚接C语言、C、Java、Python、HTML、JavaScript、vue、MySQL相关编程作业&#xff0c; 标价10-20每份&#xff0c;如有需要请加文章最下方QQ。 本文资源&#xff1a;https://download.csdn.net/download/weixin_47040861/88850902https://download.csdn.net/download/weixin_4…

SpringBoot集成阿里云OSS、华为云OBS、七牛云、又拍云等上传案例【附白嫖方案】【附源码】

1. 项目背景 唉&#xff01;本文写起来都是泪点。不是刻意写的本文&#xff0c;主要是对日常用到的文件上传做了一个汇总总结&#xff0c;同时希望可以给用到的小伙伴带来一点帮助吧。 上传本地&#xff0c;这个就不水了&#xff0c;基本做技术的都用到过吧&#xff1b; 阿里…

osqp-eigen学习

OSQP文档学习 参考博客&#xff1a; &#xff08;1&#xff09;二次规划&#xff08;QP&#xff09;与OSQP求解器 &#xff08;2&#xff09;如何使用OSQP-Eigen osqp-eigen 1 osqp-eigen接口 以下列问题的求解为例&#xff1a; s.t. 1 ≤ x 1 ≤ 1.5 1≤x_1≤1.5 1≤x1​≤…

毕业设计:基于知识图谱的《红楼梦》人物关系可视化

文章目录 项目介绍部署步骤项目运行 项目介绍 github地址&#xff1a;https://github.com/chizhu/KGQA_HLM?tabreadme-ov-file 基于知识图谱的《红楼梦》人物关系可视化&#xff1a;应该是重庆邮电大学林智敏同学的毕业设计&#xff0c;在学习知识图谱的过程中参考使用。 文…

【开源软件的影响力有多大?】

开源软件的影响力有多大 开源软件的影响力 开源软件的影响力 开源软件对现代技术和发展有着巨大的影响&#xff0c;开源软件指的是那些发布时附带源代码的软件&#xff0c;它们通常允许用户自由地使用、研究、修改和分享软件。以下是一些开源软件影响力的关键方面&#xff1a;…