关键词不能为空

c语言static「c语言static关键字的作用」

作者:admin
来源:http://www.sdzsb8.cn/zsxx/95103.html
日期:2023-04-05 11:45
评论:0
阅读 88
比如:intfun1(){staticints_value=0;....}那么fun1不管在什么地方被调用,当函数... 在C语言中,static关键字的作用如下: 1、在修饰变量的时,static修饰的静态局部...

1静态成员

如果定义了一个student类,定义 3 个student类的对象,如下:

student stud1, stud2, stud3;

那么,每一个student类对象都分别有自己的成员变量,而不同对象的成员变量各自有值,互不相干。但是,有时人们希望有一个或几个成员变量为所有对象所共有。这样,可以实现数据共享。

学习C语言时已经了解了全局对象,它能够实现数据共享。如果在一个程序文件中有多个函数,在每一个函数中都可以改变全局变量的值。全局变量的值为各个函数共享,但是,用全局变量时安全性得不到保证,由于在各处都可以自由地修改全局变量的值,很有可能偶到失误,全局变量的值就被修改,导致程序错误。因此,在实际工作中很少使用全局变量。

如果想在同类的多个对象之间实现数据共享,也不要用全局对象,可以用静态的成员变量。使用静态成员变量,实现数据共享。

2静态成员变量

2.1 静态成员变量的定义

静态成员变量是一种特殊的成员变量。它以关键字static开头,用static关键字来修饰的一种成员变量,例如:

class student

{

public:

char name[32]; //姓名

char addr[32]; //家庭地址

static long long number; //电话号码

public: //以下部分是公有部分

student(char* pn, char* pa)

{

strcpy(name, pn);

strcpy(addr, pa);

}

void print() const

{

cout << "name = " << name << endl;

cout << "addr = " << addr << endl;

cout << "number = " << number << endl;

}

};

此时,在student类中定义的number成员变量,就是“静态成员变量”。每个student类对象中的number的值都是一样的,把它定义为静态成员变量,这样它就为各对象所共有,而不只属于某个对象的成员,所有对象都可以引用它。

静态的成员变量在内存中只占一份空间(而不是每个对象都分别为它保留一份空间)。每个对象都可以引用这个静态成员变量。所有同类对象的静态成员变量的值都是一样的。如果改变它的值,那么,在各个对象中这个成员变量的值都同时改变了。这样,可以节省空间,提高效率。

静态成员变量是属于类,而不是属于某个独立对象。N个独立的对象,共享一个静态成员变量。

如下是一个测试例子:

C++什么是静态成员变量,如何定义静态成员变量?Linux C++第57讲

可以看到,student类定义number成员是static类型。在类外给number成员初始化。然后,在stud对象中修改number成员的值。

然后,输出stud1对象的信息,得到的stud1. number成员变量是stud.number设置的值。所以,stud, stud1对象是共享static类型的number成员变量。

2.2 静态成员变量初始化

静态成员变量可以初始化,但只能在类体外进行初始化。如:

long long student::number = xxx26572996; //在类体外对静态成员变量赋值

其一般形式为:

数据类型 类名::静态成员变量名 = 初值;

不必在初始化赋值语句中加 static。

注意:不可以在构造函数的参数初始化表中对静态成员变量初始化,例如:

student(char* pn, char* pa, int n):number(n)

{

strcpy(name, pn);

strcpy(addr, pa);

}

在构造函数中,对static类型的number成员进行初始化,是错误的操作。

如果未对静态成员变量赋值,则编译系统会自动赋初值为0。

如果一个成员变量定义为const类型,同时,也是static类型,那么,应该怎么样初始化?有如下的分析:

(1) static类型的成员变量,需要在类外进行初始化;

(2) const类型的成员变量,需要在构造函数的初始化列表进行初始化;

那么,const类型的static成员变量,不可以在构造函数的初始化列表中进行初始化,例如:

C++什么是静态成员变量,如何定义静态成员变量?Linux C++第57讲

提示 student::number成员变量是static类型,仅仅在定义的时候可以初始化。所以,不可以在构造函数列表中初始化。所以,在类外对static类型的成员变量进行初始化,程序测试代码如下:

C++什么是静态成员变量,如何定义静态成员变量?Linux C++第57讲

本文来自网络,不代表「专升本要什么条件_专升本要几年_成人高考专升本_山东专升本信息网」立场,转载请注明出处:http://www.sdzsb8.cn/zsxx/95103.html

c语言static「c语言static关键字的作用」的相关文章

  • including「including和included的区别」

    including「including和included的区别」:included和including的区别 included是动词include的过去式及过去分词,意为“包括;(使)成为……的一部分;允许(某人)加入活动”,作形容词有“包括在内的”意思。...高中...

    招生学校
  • 注会考试时间「2022年cpa考试时间」

    注会考试时间「2022年cpa考试时间」:cpa考试时间及科目安排20222022年cpa什么时间考试呢?具体每个科目的安排是什么呢?2022年注会考试时间及科目安排专业阶段考试:2022年8月26 日(星期五)08:30-11:...202...

    招生学校
  • cet4官网入口「cet4登录入口」

    cet4官网入口「cet4登录入口」:2022四六级准考证官网登录入口http://cet-bm.neea.edu.cn/小伙伴们,2022上半年陕西省四六级考试准考证打印已经开始了,准考证打印时间是 6月1日起 ,考生需要进入...摘要...

    资讯
  • cisp证书「cisp证书含金量大吗」

    cisp证书「cisp证书含金量大吗」:CISP证书含金量怎么样? cisp证书有什么作用? 现在,全国各地的CISP基本上竞争状态。 为了吸引业务,各机构都在未经过国测的同意而私自打价格战,降低服务标准,降低...二者都可以,但需看

    资讯
  • currency「currency和money区别」

    currency「currency和money区别」:currency:a paper currency 纸币 foreign currencies 外币 强调流通,用于比较专业的金融领域,谈到金融问题用这个比较好money:广义上的“钱”,还可以表示财...

    资讯
  • in case「in case和in case of的区别」

    in case「in case和in case of的区别」:意思不一样,on case意思是在...情况下,in case of的意思是万一... 意思不一样,on case意思是在...情况下,in case of的意思是万一...in case of和in...

    招生学校
  • eachof「each of 与every of」

    eachof「each of 与every of」:every one of us表示“大家都,我们都”强调整体概念。 each of us 指“我们中的每个人”强调个体 every oneofus表示“大家都,我们都”强调整体概念。 eachofu....

    招生学校
  • ce是什么认证「做一个ce认证多少钱」

    ce是什么认证「做一个ce认证多少钱」:ce认证是什么认证? CE认证是什么? 什么是CE认证? CE认证是欧盟强制性安全认证(非质量认证),其主要目的是产品不危及人类、动物和货品的基本安全要求只要产品出口...ce认证是指什么认证

    招生学校
  • 汉语言文学考研科目「张雪峰谈汉语言文学考研」

    汉语言文学考研科目「张雪峰谈汉语言文学考研」:张雪峰建议女生选的专业有汉语言文学专业、学前教育专业、小语种专业、金融专业等,金融学专业近年来一直是考生报考的热门专业,金融学专业毕业生职业发展前景好...大一新生很快就

    招生学校
网站公告