设为首页 加入收藏

TOP

C++继承:同名隐藏、覆盖,虚函数
2014-11-24 12:25:53 来源: 作者: 【 】 浏览:0
Tags:继承 同名 隐藏 覆盖 函数

不同作用域声明的标识符的可见性原则:


如果存在两个或多个具有包含关系的作用域,外层声明了一个标识符,而内层没有再次声明同名标识符,那么外层标识符在内层依然可见,如果在内层声明了同名标识符,则外层标识符在内层不可见,这时称内层标识符隐藏了外层同名标识符,这种现象称为隐藏规则。


在类的派生层次结构中,基类的成员和派生类新增的成员都具有类作用域。二者的作用范围不同,是相互包含的两个层,派生类在内层。这时,如果派生类声明了一个和某个基类成员同名的新成员,派生的新成员就隐藏了外层同名成员,直接使用成员名只能访问到派生类的成员。如果派生类中声明了与基类同名的新函数,即使函数的参数表不同,从基类继承的同名函数的所有重载形式也都被隐藏。如果要访问被隐藏的成员,就需要使用类作用域分辨符和基类名来限定。


作用域分辨符,就是"::",它可以用来限定要访问的成员所在的类的名称。一般的使用形式是:


类名::成员名


类名::成员名(参数表)


关于同名隐藏的验证:


代码1:



由结果可知已经不能直接从B的对象中直接用函数名访问print2()了。


将b.print2(); 改为: b.A::print2();



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++中的explicit关键字 下一篇C++:成员函数实现在类定义中与在..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)