这几天把《C++程序设计》重新看了一遍,发现了好多自己以前没有注意的知识点,尤其时关于关键字static和extern的使用,让我有一种温故而知新的感觉!
关于关键字static的使用场景有两种:
在类外使用时可分为两种情况,分别如下:
在定义变量的使用中有两种情形,分别如下:
静态局部变量
#include
using namespace std;
int ceshi()
{ //定义静态局部变量a
static int a=0;
a++;
return a;
}
int main()
{
for(int i=0;i<5;i++)
{
cout<<ceshi()<<endl;
}
return 0;
}
对代码中局部静态变量a的值
分析如下:
第几次调用 | 调用时初值 | 调用结束时的值 |
---|---|---|
1 | 0 | 1 |
2 | 1 | 2 |
3 | 2 | 3 |
4 | 3 | 4 |
5 | 4 | 5 |
静态外部变量:
通俗的的说就加了static关键字的外部变量,它只限于本文件使用,不能被其它文件调用。代码演示如下://file1.cpp
#include
using namespace std;
//在file1.cpp文件中定义静态外部变量a
static int a=3;
int main()
{
.
.
.
}
//file2.cpp
#include
using namespace std;
//在file2.cpp中试图声明file1.cpp中定义的静态全局变量a
extern a;
int main()
{
cout<<a<<endl;
}
分析:在file1.cpp中定义了一个静态
外部变量a,因此它只能用于本文件,虽然在file2.cpp中使用了extern int a;
声明a为其它文件中的外部变量,但是file2.cpp文件仍然无法使用file1.cpp中的全局变量a,因为其是静态的
,只能供本文件调用。
静态函数:
在定义函数时在函数类型的前面加关键字static。
静态函数的使用和静态外部变量的使用相同
,如果一个函数被声明为静态函数,则其只能供其所在文件的其它函数引用,而不能被外部文件中的函数引用。代码如下:
//file1.cpp
#include
using namespace std;
//在file1.cpp文件中定义了静态函数max()
static int max(int a,int b)
{
int z;
z=x>y?x:y;
return z;
}
//file2.cpp
#include
using namespace std;
int main()
{ //试图声明file1.cpp文件中定义的静态外部函数max()为在其它文件中定义的外部函数
extern int max(int,int);
int a,b;
cin>>a>>b;
//调用max()函数
cout<<max(a,b)<<endl;
return 0;
}
分析:在file1.cpp文件中定义了静态函数max(),在file2.cpp文件中试图通过extern int max(int,int);
将其max()函数声明为其它文件中的外部函数,不可以,因为静态函数只能被本文件调用。
class Box
{
public:
static int height;
int width;
int length;
}
分析:代码中的数据成员height被定义为静态的,它属于类,而不属于某个具体的对象。可以通过类名或者对象名对其进行引用。
class Box
{
private:
static int height;
int width;
int length;
public:
static int volume();
}
分析:静态类成员函数的定义,只需在成员函数的最前面冠以关键字extern
即可。
在和变量相关的使用中可分为以下的两种情况:
extern
对变量进行提前引用声明,如下: #include
using namespace std:
int main()
{
extern a,b;
cout<<a+b<<endl;
return 0;
}
int a=15,b=20;
分析:变量a,b
定义在主函数的后面,如果想在主函数中使用变量a,b就需要使用关键字extern
对变量a,b进行提前引用声明。
extern
关键字,如下://file1.cpp
#include
using namespace std;
//在file1.cpp文件中定义非静态外部变量a
int a=3;
int main()
{
.
.
.
}
//file2.cpp
#include
using namespace std;
//在file2.cpp中声明file1.cpp中定义的非静态外部变量a
extern a;
int main()
{
cout<<a<<endl;
}
分析:在file1.cpp中定义了一个非静态
全局变量a,在file2.cpp中使用了extern int a;
声明a,将file1.cpp中的变量a的作用域扩展到了file2.cpp文件中,在file2.cpp文件中也可以正常使用变量a。
在定义函数时,如果在函数首部的最左端冠以关键字extern
,则表示此函数时外部函数,可供其它文件调用。如下:
//file1.cpp
#include
using namespace std;
//在file1.cpp文件中定义了非静态外部函数max()
int max(int a,int b)
{
int z;
z=x>y?x:y;
return z;
}
//file2.cpp
#include
using namespace std;
int main()
{ //声明函数max()为在其它文件中定义的外部函数
extern int max(int,int);
int a,b;
cin>>a>>b;
//调用max()函数
cout<<max(a,b)<<endl;
return 0;
}
分析:在file1.cpp文件中定义了非静态
外部函数max(),在file2.cpp文件中通过extern int max(int,int);
声明该函数是其它文件中的外部函数,并进行调用。
关于关键字static和extern的讲解就到这里了,如果有帮助到各位的话记得点个赞加个关注噢!你们的赞力就是博主创作的动力!