CPP学习笔记-4

来源:互联网 发布:人才招聘源码 码农网 编辑:程序博客网 时间:2024/05/16 02:47

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;}结果:startX()x:1y:1x:2y:2~X()

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

全局(global)对象

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

0 0