当前位置: 首页 > 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

相关文章:

  • 软件即服务-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课程链接
  • “五一”假期逛上海车展请提前购票,展会现场不售当日票
  • 初步结果显示加拿大自由党赢得大选,外交部回应
  • 2025上海体育消费节启动,多形式联动打造体育消费盛宴
  • 新造古镇丨上海古镇朱家角一年接待164万境外游客,凭啥?
  • 深圳宝安区一宗涉宅用地中止出让,起始总价86.27亿元
  • 今年我国电影票房破250亿领跑全球,“电影+”带动文旅消费热潮