这个说的道理比较浅显易懂,那就是内部作用域的相同名称的什么什么会覆盖掉外部作用域的什么什么。这个什么什么可能是变量也可能是函数,如果是在C++以外的面向对象编程语言而言那就可能叫做方法。作者首先是一个简单的例子开场的。
说一个函数,函数内有一个变量,函数外也有一个同名变量,结果在函数内部使用同名变量的时候,函数内部变量被调用而外部变量却被忽略,即使是不同类型的。在类中也是一个道理,在类的继承体系中,子类的同名函数会覆盖掉父类中的同名函数,不管这些函数是不是同种类型的,也不管是不是virtual、pure-virtual、non-virtual的。
但是,当你使用public继承体系时,那就意味着你打算继承父类中所有的非private的东西。但是因为子类中存在与父类同名函数,那么这就没有达到你的目的。
我们想要的是什么呢?既能继承父类中的同名函数,有能保有自己的同名函数。方法就是你可以使用using指令和转交函数,而所谓转交函数就是写一个函数这个函数调用你想要的父类的函数。
OK,本原则内容就这么点。
总结一下:
1、在public继承下,不要出现子类同名覆盖父类同名的现象。
2、你可以使用using和转交函数来解决此事。
条款33:避免屏蔽继承而来的名字
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 写在之前 因为简书字数限制,完整版地址:https://www.zybuluo.com/hainingwyx/no...