1、类继承关系的作用域
我们都知道在如下的代码中:
int x; //全局变量
void someFunc()
{
double x; //局部变量
std::cin >> x; //读取一个新值赋予 local 变量 x
}
同名的 x 变量,作用域不同,而根据 C++的名称遮掩规则:内层作用域的名称会遮盖外层作用域的名称。,在赋值语句时,涉及的是局部变量 x。如下图所示:
当编译器处于 someFunc 的作用域内,并遭遇名称 x 时,它在 local 作用域内查找是否有什么东西带着这个名称。如果找到就停止,如果找不到就去更大的作用域中查找。
而 在继承关系中,派生类的作用域被嵌套在基类的作用域内。我们假设有两个类的继承关系如下所示:
class Base
{
private:
int x;
public:
virtual void mf1() = 0;
virtual void mf1(int);
virtual void mf2();
void mf3();
void mf3(double);
...
};
class Derived : public Base
{
public:
virtual void mf1();
void mf3();
void mf4();
...
};
两者的作用域关系图如下: