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

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lpl还在学习的路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值