C++第三次作业
C++第三次作业
标识符的作用域与可见性
一、作用域
定义:作用域是一个标识符在程序正文中有效的区域。C++中标识符的作用域有函数原型作用域、局部作用域、类作用域和命名空间作用域。
1.函数原型作用域
函数原型作用域是C++中最小的作用域。
在函数原型声明时形式参数的作用范围就是函数原作用域。
例如:
double area(double radius);
2.局部作用域
函数形参列表中形参的作用于,从形参列表中的声明处开始,到整个函数体结束之处为止
函数体内声明的变量,其作用域从声明处开始,一直到声明所在的块结束的大括号为止。
块就是一堆大括号括起来的一段程序。
具有局部作用域的变量也称为局部变量。
3.类作用域
对类成员访问的三种方式:
- 如果在x的成员函数中没有声明同名的局部作用域标识符,那么在该函数内可以直接访问成员m。
- 通过表达式x.m或者x::m。这正是程序中访问对象成员的最基本方法。
- 通过ptr->m这样的表达式,其中ptr为指向x类第一个对象的指针。
4.命名空间作用域
命名空间:一个命名空间确定了一个命名空间作用域,凡是在该命名空间之内声明的,不属于前面所述各个作用域的标识符,都属于该命名空间作用域。
命名空间的语法形式:
namespace 命名空间名{
命名空间内的各种声明(函数声明、类声明)
}
引用其他命名空间的标识符如下:
命名空间名::标识符名
例如:
namespace someNs{
class someClass
}
作用域实例:
运行结果:
二、可见性
程序运行到某一点,能够引用到的标识符,就是该出可见的标识符。
命名空间的作用域最大,接下来依次是类作用域和局部作用域。
作用域的可见性一般规则:
- 标识符要声明在前,引用在后。
- 在同一作用域中,不能声明同名的标识符。
- 在没有互相包含关系的不同的作用域中声明的同名标识符,互不影响。
- 如果在两个货多个具有包含关系的作用域中声明了同名标识符,则外层标识符在内层不可见。