C++类成员解析与判断访问是否合法的顺序
在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;
}
Codeblocks 10.05(GCC)编译运行报错,错误信息如下:
-------------- Build: Debug in test2 ---------------
Compiling: main.cpp
G:\Workspace\Exercise\CodeBlocks\test2\main.cpp: In member function 'int Derived::getVal()':
G:\Workspace\Exercise\CodeBlocks\test2\main.cpp:7:9: error: 'int Based::ival' is private
G:\Workspace\Exercise\CodeBlocks\test2\main.cpp:19:12: error: within this context
Process terminated with status 1 (0 minutes, 0 seconds)
2 errors, 0 warnings
通过这个程序可以看出,编译器先解析到变量ival来自类Based中,然后才判断访问是否合法。那么,编译器这么做的原因是什么呢?
5870085
11 years, 7 months ago