更多课程 选择中心

C/C++培训
达内IT学院

400-996-5531

C++中static用法介绍

  • 发布:C++培训
  • 来源:学习笔记
  • 时间:2017-10-26 16:47

1、c语言中static关键字用法

c语言中static主要包括静态局部变量、静态全局变量和静态函数三种。

1.1 静态局部变量

该变量在函数中生成,但该变量生命周期长于函数生命周期。

示例程序如下:

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include <iostream>

using namespace std;

void fun1()

{

static int staticVar = 1;

int var = 1;

staticVar += 1;

var += 1;

cout << "staticVar =" << staticVar << endl;

cout << "var =" << var << endl;

}

int main(int argc, char* argv[])

{

fun1();

fun1();

system("pause");

return 0;

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

运行结果如下图:

staticVar由于是静态局部变量,在第一次调用fun1()函数时初始化,在第二次调用fun1()函数时,由于staticVar保存在全局数据区,即忽略掉static int staticVar = 1;所以staticVal在第二次调用的初始值为2,而var在每次调用fun1()函数时都重新申请,故每次调用fun1()函数时,var的值不变。

1.2 静态全局变量

变量定义在函数体外,用于修饰全局变量,在本文件内可见。

代码如下:

////////////////////////////////////////////////////////

//file static1.cpp

static int staticVal = 1;

int var = 1;

//file static2.cpp

#include <iostream>

using namespace std;

extern int staticVal;

extern int var;

int main(int argc, char* argv[])

{

cout << "staticVar =" << staticVal << endl;

cout << "var =" << var << endl;

system("pause");

return 0;

}

////////////////////////////////////////////////////////

编译时报错如下:error LNK2001: unresolved external symbol "int staticVal"。

即普通变量var可以在其他文件中使用,而静态变量staticVal只能在本文件中使用。

1.3 静态函数

静态函数和静态全局变量类似,即该函数只能在本文件内使用。

2、c++中static关键字用法

c语言中static的用法同样适用于c++,但c++还多两种用法,即静态成员变量和静态成员函数。

2.1 静态成员变量

静态成员变量生命周期大于对象实例生命周期,静态数据成员每个对象有一个,如该对象有多个实例也只有一个。普通数据成员每个实例都有一个拷贝。示例如下:

/////////////////////////////////////////////////////////////////

#include <iostream>

using namespace std;

class c1

{

private:

int m_w;

int m_h;

static int m_sum;

public:

c1(int w, int h)

{

m_w = w;

m_h = h;

m_sum += (m_h + m_w);

}

void GetSum()

{

cout<<"sum = "<<m_sum<<endl;

}

~c1()

{}

};

int c1::m_sum = 0; //初始化

int main(int argc, char* argv[])

{

cout<<"sizeof(c1)="<<sizeof(c1)<<endl;

c1 *rect1 = new c1(1,1);

rect1->GetSum();

cout<<"sizeof(rect1)="<<sizeof(*rect1)<<endl;

c1 rect2(1,1);

rect2.GetSum();

cout<<"sizeof(rect2)="<<sizeof(rect2)<<endl;

system("pause");

return 0;

}

/////////////////////////////////////////////////////////////////

运行结果如下图:

sizeof(c1)=8表示静态成员变量保存在全局数据区不占用类的存储空间,两次的sum值不同表示静态成员变量只会初始化一次。

2.2 静态成员函数

非静态成员函数可以访问静态或非静态成员变量,也可访问静态或非静态成员函数;静态成员函数只能访问静态成员变量和静态成员函数。如将上例

void GetSum()

{

cout<<"sum = "<<m_sum<<endl;

}

改为:

static void GetSum()

{

cout<<"sum = "<<m_sum<<endl;

}

程序可以正常运行。如将程序改为如下情况,程序会报错。

static void GetSum()

{

cout<<"sum = "<<m_w<<endl;

cout<<"sum = "<<m_sum<<endl;

}

因为m_w为非静态成员。

本文内容转载自网络,本着分享与传播的原则,版权归原作者所有,如有侵权请联系我们进行删除!

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:反汇编探索C++虚函数实现多态的机制
下一篇:C语言学习之路,C语言学习的方法和思路

C语言创建windows窗口实例

C++回调函数是什么?

C++ shared_ptr和动态数组

C语言有哪些关键词,C语言44个关键词大全

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省