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

static的了解

【关键字】static 使用总结_c++ static关键字-CSDN博客

本文来自上面的文章,这里用于学习,谢谢大佬的分享!!!

非原创!!!

1.一个项目中创建main.cpp和demo.cpp

(1)main.cpp和demo.cpp中都写入:

void func(){
cout<<"hello"<<endl;
}

编译报错 

(2)在一个文件中定义函数,在另一个文件中引入该函数的声明。

main.cpp

void func(){
cout<<"hello"<<endl;
}

demo.cpp

extern void func();

 可以!

(3)只希望func()函数在main.cpp中使用,不可以被demo.cpp使用。

main.cpp

static void func(){
cout<<"hello"<<endl;
}

添加static关键字,此时函数为静态函数,作用域由之前的整个项目内的文件变为只能在本文件内访问。                                                                                                                                                

此时可以在demo.cpp中定义同名函数func(),因为作用域不同,互不影响。

2.在全局变量前添加static

作用域缩小为只能在本文件中访问,生命周期不变。

全局变量在外部文件中可以使用extern访问,但全局静态变量在外部不可访问。

3.局部变量前添加static

局部变量生命周期变为与全局变量一致,随进程一起结束,作用域不变。

4.类的静态成员变量

该静态变量只能在类内部定义,外部声明。

class A
{
public:
	static int n;
};

// 类的静态成员变量只能在类外部定义(类外部定义时不能加static关键字),类内部声明
int A::n = 10;

int main()
{
	// 1、通过示例对象访问静态成员变量
	A a;
	cout << a.n << endl;// 输出10
	
	// 2、因为类的静态成员变量是所有该类的对象所共享的
	//    所以也可以通过类名直接访问
	cout << A::n <<endl;// 输出10
	return 0;
}

静态成员变量必须设初值,否则编译失败。

私有(保护)静态成员变量不可通过类名::变量名访问

5.类的静态成员函数

函数内部只能访问类的静态成员。

(1)类内部,外部都可以定义类的静态成员函数

class A{
public:
static void try()
{
cout<<"hello"<<endl;
}
}
class A{
public:
static void try();
}
void A::try()
{
cout<<"hello"<<endl;
}

   (2)静态成员函数没有this指针,不可访问非静态成员。

   (3)static成员函数不能被virtual修饰。                                                                                           

虚函数的实现是为每一个对象分配一个vptr指针,vptr通过this指针来调用。

虚函数调用关系:this->vptr--->ctable--->virtual function

http://www.dtcms.com/a/10141.html

相关文章:

  • 软件即服务-SaaS
  • 20.有序性与内存屏障
  • 设计模式14——组合模式
  • vue3的api风格
  • CTF-web-WP-攻防世界-1
  • 11、设计模式之外观模式
  • Html5 + Css3笔记详细汇总大全
  • 什么是流量医美?
  • 若依 ruoyi-vue 用户账号前后端参数校验密码 手机号 邮箱
  • markdown 文件渲染工具推荐 obsidian publish
  • C#自动实现缺陷数据增强
  • 从“图形可视化”到“图生代码”,低代码平台的新挑战
  • Python闭包探索,释放函数记忆的秘术
  • 2024年贵州特岗教师招聘报名流程,速速查收哦!
  • debian nginx upsync consul 实现动态负载
  • openwrt设置开机自启 tailscale为例
  • ZeRO-3、模型并行、流水线并行适用情况
  • 学校上课,是耽误我学习了。。
  • Leetcode刷题2
  • 【强推|双语】吴恩达机器学习Deeplearning.ai课程链接
  • OpenFeign快速入门 替代RestTemplate
  • springboot-阿里羚羊 服务端埋点
  • MySQL基础
  • 大屏幕适配方法之:transform:scale()
  • JS事件循环机制(event loop)之宏任务、微任务
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-39-highlight() 方法之追踪定位
  • Redis 事务
  • LVGL圆弧、线条、图片、色环、按钮矩阵、文本区域、键盘部件
  • GeoScene产品学习视频收集
  • python系列教程224——导入只发生一次