首页 > 其他分享 >类的成员静态变量和静态成员函数需要类外定义吗,举例说明

类的成员静态变量和静态成员函数需要类外定义吗,举例说明

时间:2024-08-29 13:21:50浏览次数:7  
标签:变量 静态 成员 定义 函数 类外

类的成员静态变量需要在类外定义(非声明),而静态成员函数则不需要在类外额外定义。

 

静态变量类外定义示例

 

假设有一个类MyClass,它有一个静态成员变量staticVar:

 

cpp

class MyClass {

public:

    static int staticVar; // 静态成员变量声明

    static void staticFunc(); // 静态成员函数声明

};

 

// 静态成员变量在类外定义

int MyClass::staticVar = 0; // 分配存储空间并初始化

 

// 静态成员函数在类内声明后,不需要在类外额外定义(除非有函数体)

void MyClass::staticFunc() {

    // 函数体

    staticVar++; // 访问静态成员变量

}

 

在这个例子中,staticVar在类内被声明为静态成员变量,但它需要在类外进行定义(即分配存储空间并初始化),而staticFunc作为静态成员函数,在类内声明后,其实现(函数体)直接跟在类定义之后,不需要额外的“定义”步骤(除了函数体本身)。如果静态成员函数在类内被声明为纯虚函数或只是声明了原型而没有提供实现,那么它仍然不需要在类外定义,但需要在某个地方(通常是派生类中)提供实现。

 

注意

静态成员变量是类的所有对象共享的,因此它需要在类外进行定义(分配存储空间),而静态成员函数则不需要,因为它不依赖于类的任何特定对象实例。

静态成员函数的实现(如果有的话)通常直接跟在类定义之后,或者在其他源文件中,但不需要像静态成员变量那样进行“定义”。

标签:变量,静态,成员,定义,函数,类外
From: https://blog.csdn.net/2401_86127755/article/details/141676397

相关文章

  • 静态代理ip与动态代理ip的区别与选择
    在当今软件开发领域,代理模式作为一种重要的设计模式,广泛应用于增强现有对象功能、控制访问权限以及实现远程调用等场景。本文旨在深入探讨静态代理与动态代理之间的核心区别,帮助开发者理解两者在实现机制、灵活性、性能表现及适用场景上的异同,进而指导在实际项目中如何根据具体......
  • 在做结果集封装时,若结果集表头与成员变量名不一致该如何解决?
    目录1.通过别名映射为一致:as子句2.使用resultMap3.在配置文件中开启适配规则在Score实体类中,我们定义了studentId、courseId、score、status,而在数据库中,我们设置如下:1.通过别名映射为一致:as子句在持久层接口中,我们定义了select1()方法,返回类型为List<Score>。由于......
  • 动态调用vi和静态调用vi
    记一次被静态调用的vi打开运行卡死的问题:在一次上位机的调试中,主程序静态调用了子VI,提前打开子VI的情况下,运行主程序,使用相应功能时,子VI卡死无法操作。到网上查找相关问题后了解到这是labview中静态调用的一个弊端。同时,被静态调用的vi会随主程序启动而装载,从而增加资源消耗,影......
  • Effective Java理解笔记系列-第1条-何时考虑用静态工厂方法替代构造器?
    为什么写这系列博客?在阅读《EffectiveJava》这本书时,我发现有许多地方需要仔细认真地慢慢阅读并且在必要时查阅相关资料才能彻底搞懂,相信有些读者在阅读此书时也有类似感受;同时,在解决疑惑的过程中,还存在着有些内容不容易查找、查找到的解答质量不高等问题,于是我决定把我阅读此书......
  • 为什么选择国产静态代码检测工具
    随着国产软件的使用及对安全要求提升,越来越多的企业在关注软件开发安全及代码安全的同时,逐渐将选择目光放在国产化工具上。相较于国外工具,国产化代码检测工具能更好地支持国内行业标准,同时提供更切合实际情况的定制化服务和及时的售后,国产化工具主要特点有:1、更好地本地化支持:使......
  • 负责缓解超级智能AI风险的OpenAI团队已失去近半数成员,一位前研究员表示
     根据前治理研究员DanielKokotajlo的说法,OpenAI已经失去了将近一半从事AI安全工作的人员。“这不是一个有组织的行动。我认为这只是个人逐渐放弃,”Kokotajlo在周二发布的一篇《财富》报道中表示。2023年4月离开OpenAI的Kokotajlo说,这家ChatGPT制造商最初有大约30人在处理......
  • C# 类(二)——成员:属性、方法、事件
    目录1、类的成员2、字段(field)3、属性(property)4、方法(method)5、事件(event)1、类的成员类具有表示其数据和行为的成员。类的成员包括在类中声明的所有成员,以及在该类的继承层次结构中的所有类中声明的所有成员(构造函数和析构函数除外)。基类中的私有成员被继......
  • Cyberchef实用功能之-模拟沙箱的文件静态分析能力
    本文将介绍如何使用cyberchef提取文件的重要元数据的信息,根据自己的需求实现沙箱中的静态文件的分析能力。在网络安全日常的运营,护网行动,重保活动的过程中,样本的分析是一个重要的过程,这些可疑或者恶意的样本的来源有如下几种:数据包流量中提取的样本EMAIL邮件附件中提取的......
  • java在项目中实现个性化定制的数据可视化图表———静态,动态获取数据
    一、Echarts介绍ECharts是一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。ECharts最初由百度团队开源,并于2018年初捐赠给Apache基金会,成为ASF孵化级项目。2021年1月26日晚,Apache基金会官方宣布ECharts项目正式毕业。1月28日,EChar......
  • 如何编译FFTW3库:静态库与动态库的编译指南
    目录1.下载并解压FFTW3库2.配置编译选项3.编译并安装库4.验证编译结果5.在项目中使用FFTW3库6.总结FFTW3(FastestFourierTransformintheWest)是一个广泛使用的高性能傅里叶变换库。它支持多种优化,适用于多线程计算和SIMD指令,是处理大规模数据傅里叶变换的理......