C++ static重点知识集合~

C++中static的使用方法

1. static是什么?

可以用来定义静态变量,静态函数,一个叫做“静态”的C++修饰符。

2.为什么要使用static?

函数内部定义的变量在被程序执行到定义的时候,编译器会为它在栈上分配空间并且在函数结束的时候自动释放掉。这种情况下,如果我们想把这个变量在函数结束后也持续保存下去该怎么办呢?

如果使用全局变量,则会破坏该函数的封装性,从而破坏了访问的范围。换言之,此函数中定义的变量不仅仅受到该函数自己的控制。

3.什么时候使用static?

需要一个数据对象贯穿整个类,不因为对象的改变而改变的时候。

举例,将银行账户设成一个类,则每个客户A,客户B,客户C分别是该类的三个对象,其中保持不变的是银行每年的年利率。因此可以将利率设为是静态成员。

根据2和3我们可以得知,为了实现其完好的封装性同时保持其贯穿整个类的不变性,我们要将它隐藏在类的内部,对外不可见。

4.该如何使用static?

当对一个成员使用了static,有两种情况,一种是声明该变量将会是一个static变量,一种是对该static变量进行初始化。static被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间。整个使用的过程我们需要遵守下面几个原则:

static变量

  1. 一个类的声明是提前说明该类的大小和尺寸,并没有实际分配内存空间。
    因此我们不能在一个没有分配空间功能的区域(类的声明部分)初始化我们的static变量,这样会造成编译错误。我们可以在类的声明部分对static变量进行声明:
    class Test { private: static int a; }
    可以在类的成员函数定义中初始化,在main()函数前的全局数据处声明或者定义。
    #include <test.h>
    int Test::a = 1;//此处初始化
    main(){}
    初始化的格式必须注意:<数据类型><类名>::<静态数据成员名> = <值>,初始化是不需要加static的,以免和一般的静态变量或是对象混淆。引用也要同样使用 <类名>::<静态数据成员名> 的格式
  2. static存在的目的是为了减少我们的内存分配空间,同时方便使用一个从一而终的变量,无论对象。所以我们不能将它的初始化放在头文件中,会造成重复定义。 声明当然是随意的啦~

static函数

static函数是没有this指针的~~

static函数中不能引用非static变量,如果需要引用,一定要通过实例化之后类的对象来进行引用; 下面是错误的写法:

编译出错,因为在静态成员函数中引用了非静态成员变量。因为非静态成员还没有分配内存空间!!

#include<iostream.h>
class Test
{
public:
void output(){}
static void init(){
x = 0;// == 错!==
y = 0;// == 错! ==}
}
void main(void){ Point::init(); }

下面这种写法编译一样会出错,因为静态的成员变量没有初始化就被使用,还是相当于没有分配内存空间!!

#include<iostream.h>
class Test
{
public:
void output(){}
static void init(){
x = 0;
y = 0;}
private:
static int x;// == 只是声明,还没有初始化!==
static int y;// == 只是声明,还没有初始化!==
}
void main(void){ Point::init(); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值