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

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++ vector class c