zoukankan      html  css  js  c++  java
  • c++课程感想6

    static:共享即通讯

    一句话概括:局部作用域,全局生存期。

    为什么要设计成为这样?

    可以看一下这样的一段代码:

    #include <iostream.h>
    #include <string.h>
    
    class CSmallOne
    {
    public:
        CSmallOne(int sma);
        int a;
    };
    
    CSmallOne::CSmallOne(int sma)
    {
        cout <<"Smallone constructing with a value of"
            << sma <<endl;
    }
    
    void fn(int n)
    {
        static CSmallOne sm(n);    //静态局部对象在静态数据区创建(只一次)
        sm.a += n;
        cout <<"In function fn with n= " << sm.a <<endl;
    }
    
    //CSmallOne sm(5);
    
    void main()
    {
        fn(10);        //只看见一次调用构造函数
        fn(10);        //值可以累加(静态局部对象的特征)
    }

    在这里,创建了一个静态局部对象,然后构造函数在这里只是调用了一次,当再次调用时,并没有调用构造函数,这里我们可以类比静态局部变量,这个是存储在静态数据区域的,然后构造函数一旦调用,对象就在静态区了,所以下次就不需要我们再次去调用了。

    还有就是一个程序

    #include <iostream.h>
    #include "A.h"
    
    A :: A()
    {
    	cout << "in A" << endl;
    }
    class A
    {
    public:
    	A();
    };
    
    #include <iostream.h>
    #include "A.h"
    
    A a;
    
    void main()
    {
    	cout << "in main" << endl;
    }
    

     在这里,我们要考虑的是出来的结果,为什么是A而不是main,在这里,A在全局区域,那么首先在加载时便会自行调用构造函数,于是A出来了,但是我们不妨想想,在这里,直接没有经过main函数就进行调用了,所以这是个问题。一般设计者是希望在main里面执行的。

  • 相关阅读:
    复杂JSON字符串转换为Java嵌套对象的方法
    好代码是如何炼成的
    让数据流转换代码更加健壮流畅:List的Stream包装
    由一个重构示例引发的对可扩展性的思考
    如何高效搜索信息
    个人安全防护简明指南
    YAML配置解析
    事件处理业务的简易组件编排框架
    lambda表达式滥用之殇:解耦三层嵌套lambda表达式
    碎碎念四六
  • 原文地址:https://www.cnblogs.com/wit-lq/p/4881033.html
Copyright © 2011-2022 走看看