CPP学习笔记-4

static两种不同的职责,一是其持久存储的,二是访问性受到局限,一个是在哪里,另一个是谁能看到你,在C中基本是这样的。

static in C++

static 本地变量是持久存储的,但是,只有在本地域的范围内才能访问,下面只能在f()中访问static本地变量x

int  f(){
    static int x;
    x++;
    return x;
}

int main(){
    cout << f() << endl;
    cout << f() << endl;
    return 0;
}

静态成员变量被所有的对象实例共享

class A{
    public:
        A(int i):i(i){
            cout << "A()" << endl;
        }
        ~A(){
            cout << "~A()" << endl;
        }
    static int j;
    private:
        int i;

};
int A::j = 0;

int main(){
    A a(1),b(2);
    cout << a.j << endl;
    a.j += 100;
    cout << b.j << endl;
    return 0;
}

静态成员函数被所有对象共享,只可访问静态成员,否则:
[Error] invalid use of member ‘A::i’ in static member function

函数中的静态对象

函数中若有静态对象,那么它什么时候被初始化,每次调用函数的时候怎么处理?

class X{
    public:
        X(int x, int y):x(x),y(y){
            cout << "X()" << endl;
        }
        ~X(){
            cout << "~X()" << endl;
        }
        void inc(){
            this->x++;
            this->y++;
        }
        void out(){
            cout << "x:" << x << endl;
            cout << "y:" << y << endl;
        }
    private:
        int x,y;
};

void g(){
    static X x(0,0);
    x.inc();
    x.out();
}

int main(){
    cout << "start" << endl;
    g();
    g();
    return 0;
}
结果:
start
X()
x:1
y:1
x:2
y:2
~X()

多次调用g(),只初始化一次对象,再次调用时,使用同一对象,g()第一次调用时,x初始化。

全局(global)对象

全局对象的构造函数在main函数之前被调用,当main退出或exit被调用时析构

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值