当前位置:首页 » 《随便一记》 » 正文

C++基础——static成员

20 人参与  2022年11月15日 14:18  分类 : 《随便一记》  评论

点击全文阅读


目录

回顾:

static修饰局部变量时,称为静态局部变量。

static修饰全局变量时,称为静态全局变量。

 static成员变量:

1.声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量。

静态成员函数:

总结一下static在类中使用的特性:


回顾:

static修饰局部变量时,称为静态局部变量。

        加上static使得局部变量出了自己的范围后也不会被销毁,延长了生命周期,但其作用域还是局部的不变。

static修饰全局变量时,称为静态全局变量。

        全局变量本身就具有整个程序的生命周期和外部的链接属性,但使用了static修饰后,会使其失去外部链接功能,也就说它只能在本文件中使用(只在该.cpp文件中使用)。

若是static在类中使用呢?

例: 

#include<iostream>using namespace std;int N = 0;//全局变量class A {public:A(int a=10):_a(a){++N;}A(const A& t){++N;}private:int _a;};N--;int main(){A a1(10);A a2(a1);A a3, a4;cout <<"N的值:"<< N << endl;return 0;}

        解析:该代码主要是为了统计main函数创建对象时,累计使用了多少次构造函数和拷贝构造的总数。 但全局变量安全性低,任何人都可以改(比如main函数前N被--),使得结果出现了误差,所以尽量不要使用全局变量。

 

 

 static成员变量:

1.声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量。

class A {public:A(int a = 10):_a(a){++N;}A(const A& t){++N;}private:int _a;static int N;//静态成员变量};

        注意:成员变量一旦加了static关键字后就会处在静态区的,类是处在栈区的,不要因为静态成员变量在类内就以为它和类中其他的成员是在一起的! 所以静态的成员变量只能在类外去定义,类内只能是声明,而且不可赋值!!!

         所以静态变量不可于缺省值、初始化列表处赋值。 

 

 注:静态成员定义时还得指明是哪个类的成员。生命周期虽然是全局的,但作用域是受类域限制的!

代码如下:

class A {public:A(int a = 10):_a(a), N(10)//不可赋值{++N;}A(const A& t){++N;}private:int _a;public:static int N = 0;};//在类外给值int A::N = 0;int main() {A a1(10);A a2(a1);A a3, a4;//静态成员变量的访问方式1:当静态成员变量是public时, cout << "静态成员变量N的值:" <<a1.N << endl;cout << "静态成员变量N的值:" << A::N << endl;A* ptr = &a1;cout << "静态成员变量N的值:" << ptr->N << endl;return 0;}

        当静态成员变量是public时,类外函数中有三种访问其变量方式: 

1.就是对象.静态成员变量、2.类名+域作用限定符+成员变量、3.指针+箭头访问静态成员变量。

 

        当静态成员变量是private时,类外就无法直接访问了,这时就需要用到静态成员函数了。

静态成员函数:

        它与静态成员变量一样,都是前面加static关键字即可,该种函数它只能访问静态的成员变量!!!
 

class A {public:A(int a = 10):_a(a){++N;}A(const A& t){++N;}static int GetN() {return N;}private:int _a;static int N;};int main(){    A a1(10);A a2(a1);A a3, a4;    cout << A::GetN() << endl;cout << a1.GetN() << endl;}

        解析:静态成员函数是公有的,类外可以访问到,而静态成员函数又是类中的,可以随意访问类中的成员,即使N为私有,类外也可以利用公有函数去访问私有成员(这就是封装的特性)。 

总结一下static在类中使用的特性:
 

1. 静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区

2. 静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明

3. 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问

4. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员

5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/48527.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 完结文末日重生我囤十亿物资杀穿尸潮列表_完结文末日重生我囤十亿物资杀穿尸潮(林野苏晴)
  • 小说江诗云路明哲小说已更新+番外篇章(年少的爱终将散去)纯净阅读
  • 真千金伪装大学生在自家公司实习让狗爬后一口气看完_宋氏小林小姑娘高分神作_小说后续在线阅读_无删减免费完结_
  • 萧逸尘,楚璃,叶紫嫣爱恨决绝,此生不见番外(爱恨决绝,此生不见)TXT+后续+结局在线阅读
  • 假千金要交换人生?我抱着空间做首富爽文_苏木青赵景城虐心反转_小说后续在线阅读_无删减免费完结_
  • 温时雨谢远之续集(清风难渡无缘人)全本完整免费版_起点章节+后续(温时雨谢远之)
  • 订婚两个月后,未婚夫要摆脱包办婚姻精心打造_肖明宝宝宾客故事会_小说后续在线阅读_无删减免费完结_
  • 霍景琛,苏晚,林深昔年请深如海,终不敌薄凉附加(霍景琛,苏晚,林深)(昔年请深如海,终不敌薄凉)全本浏览阅读连载中
  • 新章速递汤安甯,白子奕,汤贝贝是什么小说(结婚十年,回归家庭的老婆在外有二胎了)完本阅读无广告(结婚十年,回归家庭的老婆在外有二胎了)
  • 娇牛马导师偷我论文99篇成功升博导,我让他牢底坐穿精校文本_周老师师姐师兄爽文_小说后续在线阅读_无删减免费完结_
  • 独家顾宇,罗薇:结局+番外精编之作(资助生装阔气,我可不参加)电子书畅享阅读
  • 宗门全员重生,小师妹摆烂不干了(君拂君芙蓉)_宗门全员重生,小师妹摆烂不干了

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1