C/C++变量在嵌套域内可见

C++程序中每个名字都必须指向唯一的一个实体(如对象、函数、类型或模板)。但是我们都知道,在一个程序中,经常出现相同的名字指向不同的实体。这个实现的机制就是编译器根据上下文(Context)区分出名字的不同含义。而用来区分名字含义的一般上下文就是域(scope)。C++支持三种形式的域:局部域(local scope),名字空间域(namespace scope)和类域。

比如在一个cpp文件里,有一个全局变量,相对的里面的函数就是这个全局域的嵌套域,这个全局变量在所有嵌套域可见。
又如class里,又有一个class,那么外层的变量在里面的class也是可见的:

#include <iostream>
using namespace std;
 
class c1
{
public:
    int a;
    void foo();
    class c2
    {
    public:
        int a;
        void foo();
    } b;
};
void c1::foo()
{
    a = 1;
}
void c1::c2::foo()
{
    a = 2;
}
 
int main()
{
 
    class c1 f;
    f.foo();
    f.b.foo();
    cout << f.a << endl;
    cout << f.b.a << endl;
    return 0;
}
posted @ 2018-08-04 12:10  zengzhaocheng  阅读(92)  评论(0编辑  收藏  举报