static静态处理笔记----C++学习之路

来源:互联网 发布:狂人日记读后感知乎 编辑:程序博客网 时间:2024/05/20 04:14

    在分类上,static主要分为static data 与static function。 

 1.静态数据:static data,只能存在一份!举个例子,如果我们不是静态数据,那么可以有多份,例如一个银行类

,里面可以有个账户信息info,那么这个info可以有很多份,不同的人都应该有属于自己的账户,所以不能设置为静

态数据。如果是银行利率rate,那么只要一份,static double m_rate。

2.静态函数,static function,静态函数没有this point,这句话的解释就是:假如一个复数取实部,c1.real();在C中显示

可以为Complex::real(&c1); 这个c1的地址就是this point。所以静态函数没有this point,那么静态函数只能用来处理静态

数据。

静态数据在class外需要定义。

举个例子:

class Account{    static double m_rate;    static void set_rate(const double& x){m_rate=x;}}double Account::m_rate = 8.0;int main(){    Account::set_rate(5.0);       Account a;    a.set_rate(7.0);} 调用静态函数的方法:1.通过object 2.通过classname

3.static涉及的一个设计模式:singleton

单例模式,确保一个类只有一个单例。

举个例子:

class A{public:    static A& getInstance(){return a;}    void setup(){........}private:    A();    static A a;}
把ctor放在private,那么没人能够创建出A的对象,利用getInstance出去唯一的a。

例如:A::getInstace().setup();

但是,当我们没有用过的话,这个静态的a仍然会存在。

所以会有更好的方法:

class A{public:    static A& getInstance(){return a;}    void setup(){........}private:    A();}A& A::getInstance(){    static A a;    return a;}
这样的话,如果我们使用了一次,之后就会有a出现,但是static 的a在离开scope还会存在,并且只存在一个。