C++-C++类成员解析与判断访问是否合法的顺序

C++-C++类成员解析与判断访问是否合法的顺序

想挽留 发布于 2017-06-02 字数 672 浏览 1055 回复 1

在C++面向对象程序设计中,如果遇到一个变量,同名的变量同时存在于全局作用域、几个类中时,需要进行解析,判断当前使用的变量来自于那个作用域。然后再判断访问是否合法,比如访问私有程序违法等等。

请看下列代码:

#include <iostream>

using namespace std;

class Based{
private:
int ival;
};

class Derived:public Based{
public:
int getVal();
};

int ival = 99;

int Derived::getVal()
{
return ival;
}

int main()
{
Derived d;
int val = d.getVal();
cout << val << endl;
return 0;
}

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

清晨说ぺ晚安 2017-06-12 1 楼

这个问题是毫无疑问的,并不是编译器要这么做,C++标准就已经规定了这么做。
在解析一个变量的时候,是从最里面的作用域开始查找的,只要找到了,就不会再往外层作用域查找,对于 getValue 函数中的 iVal 来说,类作用域中的那个 iVal 是第一个找到的,所以不会再到外层的全局作用域去找了,但是又发现这个变量在 getValue 函数中没有访问权限,所以就报错了。如果它是有访问权限的,那么必定是取 Based 中的 iVal。