作用域可见性:
如果存在两个或多个具有包含关系的作用域,外层声明了一个标识符,而内层没有再次声明同名标识符,那么外层标识符在内层依然可见,如果在内层声明了同名标识符,则外层标识符在内层不可见,这时称内层标识符隐藏了外层同名标识符,这种现象称为隐藏规则。
在类的派生层次结构中,基类的成员和派生类新增的成员都具有类作用域。二者的作用范围不同,是相互包含的两个层,派生类在内层。这时,如果派生类声明了一个和某个基类成员同名的新成员,派生的新成员就隐藏了外层同名成员,直接使用成员名只能访问到派生类的成员。如果派生类中声明了与基类同名的新函数,即使函数的参数表不同,从基类继承的同名函数的所有重载形式也都被隐藏。如果要访问被隐藏的成员,就需要使用类作用域分辨符和基类名来限定。
父类处于外层,派生类处于内层。
客户端代码:
最后结果:
从以上输出,可以得出:关于C++隐藏规则部分,因为内层也就是子类对printf1和printf2进行了重新声明定义,所以,子类调用的是子类作用域的函数,并没有调用外层即父类的函数。而父类则处于作用域外层,那么派生类的方法对于其是不可见的,隐藏的,调用的也是父类自己的函数。
在派生类中,如果有对和父类同名函数进行重新声明定义,那父类函数将被隐藏,派生类无法调用,否则父类函数就不会被隐藏。
版权声明:本文为yeshen7878原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。