static 知识学习

最近一段时间,为找工作,面试的时候被人一顿鄙视。回来的时候就复习了一下基础知识。这里做一些知识点的小结,当做资料,用于以后复习,同时提供给一些像我一样的小菜鸟,当做参考。

 

static 的相关知识点,均来自网络,论坛。本文写的比较乱,比较杂。如果有错误,或不足,希望各位不小心看到本文的大侠们,指导纠正一下。

 

一:static变量存储

相对于对堆栈,static变量分配在静态数据区。由于此存储特点,有以下一些应用。

     1:全局变量

        static 修饰的变量或者函数均为全局变量,但和extern声明不一样

        首先 static与extern不能联用。

其次 static修饰的全局变量声明和定义需要同时进行。

再次 static修饰的全局变量只限于本身编译单元。

      对于static的使用必须将其定义放在.cpp文件中,.h文件只做声明,来避免对其他模块造成不必要的污染。

     2:一份拷贝(这个问题,有很多面试官都会提到)

        对于static修饰的类成员变量或者函数,均为属于类的内部实现,属于类定义部分。所以无论类的对象有多少,所有的对象均公用一份内存中的静态成员,即static修饰的变量及函数的拷贝只有一份,所有对象共用。(这个特性可以解决,如怎样才能使的类定义的对象实体只有一个)。使用:声明时候必须给出定义,即分配内存块

 

a. 初始化

 <数据类型><类名>:: <静态成员> = <值>

如  int myclass::mystatic = 0;//在.cpp文件中

 

b.使用/访问

 <类名>::<静态成员变量> 或者像正常变量一样应用如:

myclass::mystatic或者myobjetc.mystatic

二:static成员函数

      (这个问题,当时一个面试官问我。我直接傻掉,虽然经常用,但还真不知道相关的知识点。被他一顿鄙视。从那以后我就知道自己有多菜,C++的基础知识基本为0,回来我就啃书了,不过现在依然是个超级菜鸟。要不断学习啊)。

       首先,static的成员函数和static的成员变量是一样的,都是类的定义部分,存储在一份共用的静态数据区中

       其次,static的成员函数是全局变量,但其作用域限制在本编译单元。

       再次,static的成员函数不具有普通成员函数与对象相关联的特性,所以static成员函数不具有隐性的this指针。所以static成员函数无法访问非静态成员变量或者非静态成员函数。也正是这个原因,访问static的成员函数及变量的开销要大于普通成员变量和函数。

      对于静态成员函数的访问可以总结为如下几点

      1.静态成员可以互相访问,其中包括函数和变量

      2.非静态成员可以无限制的访问静态成员

      3.静态成员函数不能访问非静态成员函数和非静态成员数据

对static函数的访问可以有二种方式

a : myobject.mystaticfuc()

b : myclass::mystatcifuc()。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值