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

C++从入门到精通——static成员

static成员

  • 前言
  • 一、static成员
    • 概念
    • 例题
  • 二、 static成员的特性
    • 特性
    • 例题
      • 静态成员函数可以调用非静态成员函数吗
      • 非静态成员函数可以调用类的静态成员函数吗


前言


一、static成员

概念

声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。静态成员变量一定要在类外进行初始化。

静态成员是指属于类而不属于类的任何对象的成员。静态成员在类的所有对象之间共享,并且可以在不创建对象的情况下被访问。静态成员包括静态变量和静态方法。

静态变量是类的所有对象之间共享的变量。它们在内存中只有一份拷贝,并且可以直接通过类名访问。静态变量在类的任何对象被创建之前就被初始化,它们的值在所有对象之间是一致的。

静态方法是属于类而不属于任何对象的方法。它们可以直接通过类名调用,而不需要创建类的对象。静态方法通常用于执行与类相关的操作,而不涉及特定对象的状态。

静态成员在类的定义中使用static关键字进行声明。例如,以下是一个使用静态变量和静态方法的示例:

class MyClass {
public:static int staticVar; // 静态变量声明static void staticMethod(); // 静态方法声明
};int MyClass::staticVar = 0; // 静态变量定义和初始化void MyClass::staticMethod() {// 静态方法的实现cout << "This is a static method." << endl;
}int main() {MyClass::staticVar = 10; // 静态变量的访问MyClass::staticMethod(); // 静态方法的调用return 0;
}

在上述示例中,静态变量staticVar和静态方法staticMethod属于类MyClass,可以直接通过类名进行访问和调用。

例题

实现一个类,计算程序中创建出了多少个类对象。

class A
{
public:A() { ++_scount; }A(const A& t) { ++_scount; }~A() { --_scount; }static int GetACount() { return _scount; }
private:static int _scount;
};int A::_scount = 0;void TestA()
{cout << A::GetACount() << endl;A a1, a2;A a3(a1);cout << A::GetACount() << endl;
}

以上代码定义了一个名为A的类,该类包含一个私有的静态成员变量_scount,一个默认构造函数,一个拷贝构造函数和一个析构函数。在main函数中,调用TestA函数。

TestA函数中,首先调用A::GetACount()函数获取当前A类的对象数量,然后创建了两个A类的对象a1a2,并将a1传递给a3的拷贝构造函数。再次调用A::GetACount()函数获取当前A类的对象数量。

_scount是一个静态成员变量,它在类定义外进行初始化,并在类定义中被声明为私有。该变量用于记录A类的对象数量。默认构造函数和拷贝构造函数都会在对象创建时将_scount自增1,析构函数会在对象销毁时将_scount自减1。

因此,输出结果将显示A类对象的数量。首先是0,因为还没有创建任何A类的对象。然后是3,因为在TestA函数中创建了两个对象(a1a2),并进行了一次拷贝构造(a3)。最后,在TestA函数结束后,对象被销毁,_scount减少到0。

二、 static成员的特性

特性

  1. 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区
  2. 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明
  3. 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问
  4. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员
  5. 静态成员也是类的成员,受publicprotectedprivate 访问限定符的限制

例题

静态成员函数可以调用非静态成员函数吗

静态成员函数可以调用非静态成员函数,但需要通过对象或者指针来调用。因为非静态成员函数是依赖于具体的对象或者实例的,而静态成员函数是独立于对象或者实例的,所以在静态成员函数中不能直接访问非静态成员变量和非静态成员函数。但可以通过将对象作为参数传递进来或者通过对象指针来调用非静态成员函数。

非静态成员函数可以调用类的静态成员函数吗

非静态成员函数可以调用类的静态成员函数。在非静态成员函数中,可以使用类名和作用域解析操作符(::)来调用静态成员函数。


相关文章:

C++从入门到精通——static成员

static成员 前言一、static成员概念例题 二、 static成员的特性特性例题静态成员函数可以调用非静态成员函数吗非静态成员函数可以调用类的静态成员函数吗 前言 一、static成员 概念 声明为static的类成员称为类的静态成员&#xff0c;用static修饰的成员变量&#xff0c;称之…...

【K8S:初始化】:执行kubeadm显示:connection refused.

文章目录 [root10 kubernetes]# kubeadm init --kubernetes-versionv1.23.0 --image-repositoryregistry.aliyuncs.com/google_containers --apiserver-advertise-address192.168.56.104 [init] Using Kubernetes version: v1.23.0 [preflight] Running pre-flight checks [pre…...

msvcp140_1.dll是什么?找不到msvcp140_1.dll丢失解决方法

msvcp140_1.dll 文件是一个与 Microsoft Visual C 2015 Redistributable 相关的动态链接库&#xff08;DLL&#xff09;&#xff0c;它在 Windows 系统中扮演着重要角色&#xff0c;尤其对于那些依赖于 Visual C 运行时环境的应用程序和游戏来说。以下是关于 msvcp140_1.dll 文…...

【Java探索之旅】掌握数组操作,轻松应对编程挑战

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、数组巩固练习1.1 数组转字符串1.2 数组拷贝1.3 求数组中的平均值1.4 查找数组中指…...

深入理解同步与异步编程及协程管理在Python中的应用

文章目录 1. 同步与异步函数的对比1.1 同步函数1.2 异步函数1.3 对比 2. 管理多个协程与异常处理2.1 并发执行多个协程2.2 错误处理2.3 任务取消 本文将探索Python中同步与异步编程的基本概念及其区别。还会详细介绍如何使用asyncio库来有效管理协程&#xff0c;包括任务的创建…...

Win10本地更新无法升级win11 的0x80080005解决方法

Win10本地更新无法升级win11 Visual Studio 2022 运行项目时&#xff0c;本文提供了错误“指定的程序需要较新版本的 Windows”的解决方法。 更新时提示&#xff1a;0x80080005 解决方法 1、下载Windows11InstallationAssistant.exe 【免费】Windows11InstallationAssista…...

互联网轻量级框架整合之MyBatis核心组件

在看本篇内容之前&#xff0c;最好先理解一下Hibernate和MyBatis的本质区别&#xff0c;这篇Hibernate和MyBatis使用对比实例做了实际的代码级对比&#xff0c;而MyBatis作为更适合互联网产品的持久层首选必定有必然的原因 MyBatis核心组件 MyBatis能够成为数据持久层首选框&a…...

springboot websocket 持续打印 pod 日志

springboot 整合 websocket 和 连接 k8s 集群的方式参考历史 Java 专栏文章 修改前端页面 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>Java后端WebSocket的Tomcat实现</title><script type"text/javasc…...

C代码编译过程与进程内存分布

C代码编译过程 在这篇文章中&#xff0c;我们将探讨C语言代码的编译流程以及进程在运行时的内存布局。编译过程通常包括几个关键步骤&#xff1a;预处理、编译、汇编和链接。 预处理阶段主要是处理源代码文件中的宏定义、头文件包含和条件编译指令。在此阶段&#xff0c;编译…...

Windows 部署ChatGLM3大语言模型

一、环境要求 硬件 内存&#xff1a;> 16GB 显存: > 13GB&#xff08;4080 16GB&#xff09; 硬盘&#xff1a;60G 软件 python 版本推荐3.10 - 3.11 transformers 库版本推荐为 4.36.2 torch 推荐使用 2.0 及以上的版本&#xff0c;以获得最佳的推理性能 二、部…...

JS相关八股之什么是事件循环

在JavaScript中&#xff0c;“事件循环”&#xff08;Event Loop&#xff09;是一个非常重要的概念&#xff0c;它是指JavaScript引擎如何在单线程中处理异步操作的机制。单线程意味着在任意时刻&#xff0c;JavaScript代码只能执行一个任务。 一.事件循环的工作流程大致如下&…...

SpringCloud集成Skywalking链路追踪和日志收集

1. 下载Agents https://archive.apache.org/dist/skywalking/java-agent/9.0.0/apache-skywalking-java-agent-9.0.0.tgz 2. 上传到服务器解压 在Spring Cloud项目中&#xff0c;每部署一个服务时&#xff0c;就拷贝一份skywalking的agent文件到该服务器上并解压。不管是部署…...

HTTP 域名和主机是一回事吗?有了主机和域名,如何建站?

域名不等于主机名&#xff0c;例如baidu.com是一个权威域的域名&#xff0c;但是根本没有一个主机的名字叫做baidu.com,但是dns.baidu.com就是一个主机名&#xff0c;它就是负责baidu.com的服务器的主机名&#xff0c;www.baidu.com也是一个主机名,它是百度web服务器的主机名。…...

运营干货:四个技巧掌握爆款选题方法

在运营工作中&#xff0c;选题是一项至关重要的工作&#xff0c;选对了一个热门话题&#xff0c;就能吸引大量用户的关注和互动&#xff0c;从而取得更好的运营成果。 今天&#xff0c;就给大家分享四个爆款选题方法&#xff0c;让大家的运营更上一层楼&#xff01; 第一种&a…...

柯桥商务口语之怎么样说英语更加礼貌?十个礼貌用语get起来!

当你在国外需要帮助的时候&#xff0c;这些礼貌用语真的是能够帮到你的哦 1.Would/Could you help me? 你可帮助我吗&#xff1f; 相信有些人想请求帮助的时候&#xff0c;一开口就用Can you&#xff0c;这个用在朋友或者熟人上面当然是没有问题的&#xff0c;但是如果是向…...

嵌入式工程师如何摸鱼?

有老铁问我&#xff0c;做嵌入式开发要加班吗&#xff1f; 也不知道搞什么鬼&#xff0c;现在的年轻人对加班这么抵触。 我刚做开发那会&#xff0c;啥也不懂&#xff0c;每天基本都要加班到晚上7-9点不等&#xff0c;我并不抵触加班&#xff0c;因为早早回家&#xff0c;也没什…...

C++语言题库(一)—— 基本知识类

目录 1. Hello World! 2. 据说一个人的标准体重应该是其身高&#xff08;单位&#xff1a;厘米&#xff09;减去100、再乘以0.9所得到的公斤数。已知市斤的数值是公斤数值的两倍。现给定某人身高&#xff0c;请你计算其标准体重应该是多少&#xff1f; 3. 给定一个华氏温度F…...

gemini1.5 API调用

https://ai.google.dev/pricing?hlzh-cn 查询可用的model https://generativelanguage.googleapis.com/v1beta/models?keyxxx 使用postman调用 https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro-latest:generateContent?keyxxx https://ai.google…...

C++从入门到精通——const与取地址重载

const与取地址重载 前言一、const正常用法const成员函数问题const对象可以调用非const成员函数吗非const对象可以调用const成员函数吗const成员函数内可以调用其它的非const成员函数吗非const成员函数内可以调用其它的const成员函数吗总结 二、取地址及const取地址操作符重载概…...

手写spring IOC底层源码来模拟spring如何利用多级缓存解决循环依赖的问题

在文章开始之前&#xff0c;先来看一张spring IOC加载过程的脑图吧 Spring IOC的加载过程 首先,当我们去new了一个applicationContext,它底层呢就会把我们配置的bean进行扫描,然后创建成一个一个的beanDefinition放在我们的beanDefinitionMap中,此时就有了一切创造bean的原料信…...

3分钟掌握RPG Maker资源解密:纯前端工具轻松破解加密文件

3分钟掌握RPG Maker资源解密&#xff1a;纯前端工具轻松破解加密文件 【免费下载链接】RPG-Maker-MV-Decrypter You can decrypt RPG-Maker-MV Resource Files with this project ~ If you dont wanna download it, you can use the Script on my HP: 项目地址: https://gitc…...

华为MateBook D 2018款升级Win11遇阻?手把手教你通过修改BIOS隐藏参数开启TPM2.0

华为MateBook D 2018款解锁Win11升级全攻略&#xff1a;深入BIOS底层参数调整实战 华为MateBook D系列作为商务本中的性价比代表&#xff0c;2018款用户近期在升级Windows 11时普遍遇到TPM 2.0无法启用的困扰。这台搭载第八代Intel处理器的设备其实完全具备TPM 2.0的硬件基础&a…...

基于OpenClaw与Binance API的加密货币安全助手:四层架构与实战部署

1. 项目概述&#xff1a;一个为普通人打造的加密资产守护神在加密货币的世界里&#xff0c;技术壁垒和信息不对称就像一道无形的墙&#xff0c;将许多普通人挡在了安全投资的门外。我们见过太多这样的场景&#xff1a;一位想为子女攒点教育金的母亲&#xff0c;因为误点了钓鱼链…...

Naftis架构设计原理:从Golang后端到React前端的完整技术栈

Naftis架构设计原理&#xff1a;从Golang后端到React前端的完整技术栈 【免费下载链接】naftis An awesome dashboard for Istio built with love. 项目地址: https://gitcode.com/gh_mirrors/na/naftis Naftis是一款专为Istio服务网格设计的现代化Web仪表板&#xff0c…...

终极解决方案:一键将LaTeX PDF幻灯片转换为PowerPoint格式

终极解决方案&#xff1a;一键将LaTeX PDF幻灯片转换为PowerPoint格式 【免费下载链接】pdf2pptx Convert your (Beamer) PDF slides to (Powerpoint) PPTX 项目地址: https://gitcode.com/gh_mirrors/pd/pdf2pptx 还在为LaTeX Beamer制作的精美幻灯片无法在PowerPoint中…...

SSD硬件加密性能无损?十年调查揭示五大认知误区与实战指南

1. 项目概述&#xff1a;一次关于SSD认知误区的深度调查最近在整理资料时&#xff0c;翻到了一篇2014年来自EE Times的旧文&#xff0c;内容是关于存储网络行业协会&#xff08;SNIA&#xff09;发起的一项固态硬盘&#xff08;SSD&#xff09;用户调查。虽然时间过去近十年&am…...

2025届学术党必备的六大AI科研方案推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于当下&#xff0c;各类文献产出需求呈现出多元态势&#xff0c;一键生成论文功能作为辅助工…...

杰理之RX 端 长按软关机后无法唤醒【篇】

问题描述&#xff1a;RX端长按进入软关机后&#xff0c;无法唤醒问题&#xff0c;...

从CAD建模到游戏角色动画:深入浅出聊聊B样条曲线在工业与娱乐中的实战应用

从CAD建模到游戏角色动画&#xff1a;B样条曲线的跨领域实战解析 在工业设计与数字娱乐的交汇处&#xff0c;B样条曲线&#xff08;B-spline Curves&#xff09;正悄然重塑着两个行业的创作范式。当汽车设计师在Alias中推敲车身曲面时&#xff0c;游戏动画师正在Blender里调整…...

1k Star的p-retry,让异步操作失败自动重试

文章目录1k Star的p-retry&#xff0c;让异步操作失败自动重试核心功能适用场景注意事项1k Star的p-retry&#xff0c;让异步操作失败自动重试 sindresorhus开源的p-retry项目&#xff0c;目前在GitHub上获得1009个Star。这个库的核心功能是为异步操作添加重试机制&#xff0c…...