c++学习笔记之c++作用域详解
2011-08-24 23:37
351 查看
c++作用域今天来总结一下作用域的问题。定义:作用域是一个程序文本的区域。每个名字都定义在一个作用域中,在声明点到作用域结束的区间内有效。下面就上代码:
void f() { g();//error ,g()不在作用域内 } void g() { f();//可以 } void h() { int x=y; int y=x; g(); }
上边代码对f()的调用在g()的作用域中,此作用域嵌套在全局作用域,名字必须是先声明后使用的,所以f()不能调用g()。
C++有多种作用域
1.全局作用域,在任何其他作用域之外的程序区域。
2.名字空间作用域 :一个名字空间作用域嵌套于全局作用域或者另一个名字空间作用域中比如using namespace std;
3.类作用域:位于{。。。。。}之间的的函数参数列表中的程序区域。
4语句作用域“例如 for语句内的程序区域
作用域的作用是保持名字的局部性,使之不受声明其他地方名字的影响。
下面是一个较大的实例,说明了名字是如何在语句和语句块末尾离开作用域的:
void f(int x)//f 作用域是全局的。x是局部变量 { int z=x+7;//z是局部的。 } int g(int x) { int f=x=2; return 2*f; } 因为x在不同的作用域内,所以是不会有冲突的。 int max(int a,int b) { return (a>=b)?a:b; } int abs(int a) { return (a>0)?-a:a; }
下面是一个较大的实例,说明了名字是如何在语句和语句块末尾离开作用域的:
class My_vector{ vector<int> v; public: int largest() { int r=0; for(int i=0;i<v.size();++i) { r=max(r,abs(v[i]); return r; //not i here } }; } int x; int y; int f() { int x=y; ++x; } ++x; return x; }
下面在举几个例子:类中函数
class C { pubic: void f(); void g();//成员函数 { }
}; void C:f() //类外定义的成员函数 { }
这是一种最常见的有用用法
综上述,不建议使用这种复杂的嵌套作用域,记住,程序保持简单性。
在程序设计中,尽量少用全剧变量。因为全局变量是一个公共接口,下面的方法都可以进行对其修改。代码多的时候基本不可能知道他是被哪个函数修改了。所以一个好的程序应该只有少用全局变量。
相关文章推荐
- C++学习笔记(2)之引用详解
- C/C++学习笔记:智能指针详解
- C++学习笔记(初级篇)——作用域与“extern”关键字
- c++学习笔记——个单词转换的map程序详解
- 【学习笔记】C++中的string类详解
- C++学习笔记(3):const与&修饰函数形参的作用
- C++学习笔记(九):作用域和命名空间
- C++学习笔记之vector类详解
- 【C++】学习笔记四十五——存储持续性、作用域、链接性
- C++学习笔记四(const详解)
- C++学习笔记之pimpl用法详解
- C++学习笔记(10)——虚基类的作用
- 菜鸟C++精髓学习笔记--C++程序内部执行过程(预处理、编译、链接过程的作用)
- C++学习笔记之作用域为类的常量和作用域内的枚举
- C++学习笔记之作用域为类的常量和作用域内的枚举
- C++学习笔记-友元理论详解
- J2EE系列之Spring4学习笔记(六)--IOC详解(bean之间的关系,bean的作用范围)
- C++ Data Structure 学习笔记 (2011.5.2)——Cin的用法详解以及文件的读取
- (c/c++学习笔记十二)const详解
- c++学习笔记——个单词转换的map程序详解