作用域总结
作用域
作用域是是一个标识符在程序正文中有效的区域。c++中标识符的作用域有<函数原型作用域><局部作用域><类作用域><命名空间作用域>
1.函数原型作用域
在函数原型声明时形式参数的作用范围就是函数原型作用域。
例子:double area(double radius);
2.局部作用域
1.函数形参列表中形参的作用域,从形参列表中的声明处开始,到整个函数体结束之处为止。
2.函数体内声明的变量其作用域从声明处开始,一直到声明所在的块结束的大括号为止。
3.具有局部作用域的变量也称为局部变量。
3.类作用域
类X的成员m具有类作用域
1.如果在X的成员函数中没有声明同名的局部作用域标识符,那么在该函数内可以直接访问成员m。
2.通过表达式x.m或者X::m。这正是程序中访问对象成员的最基本方法。
3.通过ptr->m这样的表达式,其中ptr为指向X类的一个对象的指针。
4.命名空间作用域
例子1:
namespace SomeNS
{
class SomeClass{.....};
}
例子2:
SomeNS::SomeClass obj1;
例子3:
using 命名空间名::标识符名;
using namespace 命名空间标识符;
例子4:
namespace OuterNS
{
namespace InnerNs{
class SomeClass{.......};
}
}
例子5:
namespace{
匿名命名空间内的各种声明(函数声明、类声明、.......)
}
程序实例:
include < iostream>
using namespace std;
int i; //在全局命名空间中的全局变量
namespace Ns{
int j; //在Ns命名空间中的全局变量
};
int main() {
i=5; //为全局变量i赋值
Ns::j=6; //为全局变量j赋值
{ //子块1
using namespace Ns;//使得在当前块中可以直接引用Ns命名空间的标识符
int i; //局部变量,局部作用域
i= 7;
cout<<”i="<<i<<endl;//输出7
cout<<”j="<<j<<endl;//输出6
}
cout<<”i="<<i<<endl;//输出5
return 0;
}
运行结果:
i=7
j=6
i=5
具有命名空间作用域的变量也称为全局变量。