【关键字】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;// 输出10return 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