您的位置:首页 > 编程语言 > C语言/C++

C++作用域

2016-03-08 00:11 357 查看
作用域通常和变量捆绑在一起,限定了变量可用范围,同时也规定了变量的生命周期:何时创建、何时销毁。作用域通常分为:全局作用域和局部作用域。


全局作用域(全局变量)

在所用函数体外部定义的变量就是全局变量,具有全局作用域。它在main函数执行前创建,mian函数结束后销毁。下面的代码演示了全局变量的创建和销毁:

1:  class World

2:  {

3:  public:

4:      World()

5:      {

6:          std::cout << "Hello world.\n" ;

7:      }

8:

9:      ~World()

10:      {

11:          std::cout << "Goodbye.\n";

12:      }

13:  };

14:

15:  World theWorld ;

16:

17:  int main()

18:  {

19:      std::cout << "Hello from main.\n" ;

20:      return 0 ;

21:  }


这段代码的执行结果是 :





theWorld对象在main函数执行前被创建,main结束后销毁。



局部作用域(局部变量)

局部作用域是一对大括号包围的区域,局部变量在在程序流进入其作用域时被创建,退出作用域时被销毁。下面一段代码演示了局部变量的创建和销毁:

1:  class World

2:  {

3:  public :

4:      World(int id)

5:          :identifier(id)

6:      {

7:          std::cout << "Hello from " << identifier << ".\n" ;

8:   }

9:

10:      World ()

11:          :identifier(0)

12:      {

13:          std::cout << "Hello from default constructor .\n" ;

14:   }

15:      ~World()

16:   {

17:          std::cout << "Goodbye from " << identifier << ".\n" ;

18:      }

19:

20:  private:

21:      const int identifier ;

22:  };

23:

24:  World theWorld ;

25:

26:  int main()

27:  {

28:      World smallworld(1);

29:

30:      for(int i = 2 ; i < 4 ; i ++)

31:      {

32:          World aWorld(i);

33:      }

34:

35:      World oneMoreWorld(4);

36:  }


执行结果为:





说明:

为类World添加了一个常量成员identifier,用来标识World的不同实例。identifier在构造函数的前导中初始化。
执行时,在main前调用默认构造函数创建theWorld
进入main函数,首先创建smallWorld(identifier = 1),smallWorld的是main函数内的局部变量,作用域是整个main函数
进入for循环局部作用域,创建和销毁了identifier = 2和identifier = 3的World两个实例
for作用域结束,进入到main局部作用域,创建局部变量oneMoreWorld (identifier = 4)
main作用域结束,销毁main作用域内的局部变量。销毁局部变量时和创建的顺序相反,即先销毁oneMoreWorld,然后是smallWorld
最后程序执行到末尾,销毁全局变量theWorld.


总结

最近在看《程序员修炼之道》,里面说:“程序员向别人解释他所做的事情都会有困难。”。自己知道,但是写出来或者讲述给别人,对于我来说确实有点困难。写篇博客都费劲…

,中学时候的语文没学好啊。以后要加强锻炼,坚持写下去!

FROM: http://www.cnblogs.com/wangguchangqing/p/3556244.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: