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

C++(静态函数)

C++中的静态函数通过static关键字进行修饰,静态函数不属于对象,而是属于类。

静态函数只能访问类的静态成员表变量或者静态函数,无法直接访问非静态成员,因为静态函数没有this指针。可以通过类名或者对象来调用静态函数。

静态函数存储在全局数据区,独立于对象实例存在,生命周期与程序生命周期相同。

#include <iostream>
#include <string>
#include <thread>class A {
public:virtual ~A() {std::cout << "类A的析构函数" << std::endl;}virtual void func() = 0 {std::cout << "类A的func()函数" << std::endl;}
};class B :public A {
public:B():B_private(0){std::cout << "类B的无参构造" << std::endl;}B(int B_private):B_private(B_private){std::cout << "类B的有参构造" << std::endl;}~B() {std::cout << "类B的析构函数" << std::endl;}void func()override {std::cout << "类B的func()函数" << std::endl;}virtual static void Get()const {std::cout << target << std::endl;std::cout << B_private << std::endl;}private:int B_private;static int target;
};int main() {return 0;
}

运行结果:

从报错信息可以知道静态函数,不能够声明为虚函数,因为虚函数依赖对象的虚函数表指针,而静态函数并不属于对象。静态函数也不能够对其进行使用const修饰限定对象状态的修改,因为静态函数不属于对象。静态函数中不能够对非静态成员变量进行访问,可以对静态成员变量进行访问。

#include <iostream>
#include <string>
#include <thread>class A {
public:virtual ~A() {std::cout << "类A的析构函数" << std::endl;}virtual void func() = 0 {std::cout << "类A的func()函数" << std::endl;}
};class B :public A {
public:B():B_private(0){std::cout << "类B的无参构造" << std::endl;}B(int B_private):B_private(B_private){std::cout << "类B的有参构造" << std::endl;}~B() {std::cout << "类B的析构函数" << std::endl;}void func()override {std::cout << "类B的func()函数" << std::endl;}static void Get() {std::cout << target << std::endl;}private:int B_private;static int target;
};
int B::target = 10;int main() {B::Get();return 0;
}

运行结果:

注意静态成员变量在类内声明,必须在类外定义并初始化。成员函数可以在类内进行声明内部直接实现,也可以类内声明后在类外定义。需要注意的是无论是成员常量和成员函数在类外进行定义时不能重复使用static关键字。

静态成员函数本质是代码段,编译时已确定地址,而静态成员变量需要分配独立内存空间,必须在类外显示定义分配存储区。


文章转载自:

http://Kc7FBRWf.znqfc.cn
http://0pg4f3hK.znqfc.cn
http://0OK2mVCv.znqfc.cn
http://x7QdVNvQ.znqfc.cn
http://8pNouDof.znqfc.cn
http://BbO8Rlun.znqfc.cn
http://Gpb47vPu.znqfc.cn
http://MbhYGlvX.znqfc.cn
http://zmrdpqwP.znqfc.cn
http://xJns5h1f.znqfc.cn
http://asuAPnIg.znqfc.cn
http://kpD6LmNS.znqfc.cn
http://zLFBaAQJ.znqfc.cn
http://ZRw4VsSy.znqfc.cn
http://mZwtJnSk.znqfc.cn
http://m4MXnubH.znqfc.cn
http://RzB5c0fw.znqfc.cn
http://etaJUcl1.znqfc.cn
http://xawsiCDv.znqfc.cn
http://BkdBx6Jy.znqfc.cn
http://WWoWdhWc.znqfc.cn
http://UM1g1xW0.znqfc.cn
http://uvE1U7Kd.znqfc.cn
http://g6cxwJwi.znqfc.cn
http://58KRFvoW.znqfc.cn
http://Mb2Jx69l.znqfc.cn
http://o6MOEd8u.znqfc.cn
http://JFSkFMm8.znqfc.cn
http://5BMgCZ6t.znqfc.cn
http://ZHXvW1Lb.znqfc.cn
http://www.dtcms.com/a/382569.html

相关文章:

  • SonarQube代码质量管理平台本地化搭建和使用
  • Redis 线上问题排查完整手册
  • 异常数据处理全攻略:原理、方法与Python实战
  • Python 进阶:从基础到实战的核心技能提升
  • Scikit-learn:从零开始构建你的第一个机器学习模型
  • 如何快速获取全机硬件详细参数?
  • 嵌入式ARM架构学习7——时钟、定时器
  • 【C++练习】17.C++求两个整数的最大公约数(GCD)
  • SQL-字符串函数、数值函数、日期函数
  • Redis内存回收:过期策略与淘汰策略
  • 【css学习笔记9】品优购项目
  • 动态规划解决网格路径问题
  • 金融科技:企业和机构银行
  • C++ 异常
  • One-hot encoding|独热编码
  • AI论文速读 | VisionTS++:基于持续预训练视觉主干网络的跨模态时间序列基础模型
  • 如何学习VBA_3.3.9:利用“搭积木”思想,快速有效地完成你的代码
  • 《使用深度学习统一时间相位展开框架》论文总结
  • Windows下使用PerfMon进行性能监控并记录日志
  • 微信小程序开发教程(十二)
  • 【攻防实战】记一次攻防实战全流程
  • 【编号520】全国4500多个地震灾害点位数据(2021.2-2025.8)
  • 牛客网习题题解(持续更新中...)
  • 2025.8.20--python基础温习
  • PCIE地址空间介绍
  • (三)BLE协议栈协议分层架构设计详解--图文结合通俗易懂
  • 主板硬件研发基础--DP/DP++
  • 287. 寻找重复数
  • 《从像素到认知:用 Keras 构建图像分类 CNN 的实战指南》
  • 深入探索 Python 元组:从基础到高级应用