类的关系图:
1|0一、作用域与名字查找
1|11.作用域的嵌套
派生类的作用域嵌套在基类之内
名字isbn解析过程:
- 因为我们是通过Bulk_quote的对象调用isbn的,所以首先在Bulk_quote中查找,这一步没有找到名字isbn。
- 因为 Bulk_quote是Disc_quote 的派生类,所以接下来在Disc_quote中查找,仍然找不到。
- 因为Disc_quote是Quote的派生类,所以接着查找Quote;此时找到了名字isbn,所以我们使用的isbn最终被解析为Quote中的isbn。
1|22.在编译时进行名字查找
成员名字的查找类型由静态类型决定
我们只能通过Disc_quote及其派生类对象来使用discount_policy。
尽管在bulk中确实含有一个名为discount_policy的成员,但是该成员对于itemP却是不可见的。
itemP的类型是Quote的指针,意味着对discount_policy的搜索将从Quote开始。
显然Quote不包含名为discount_policy的成员,所以我们无法通过Quote的对象、引用或指针调用discount_policy。
1|33.名字冲突与继承
派生类可以重用基类中的名字,由于派生类的作用域嵌套在基类中,所以会隐藏基类的同名变量
派生类成员隐藏同名的基类成员
get_mem
返回的是在Derived中的mem
1|44.通过作用域运算符来使用隐藏的成员
2|0二、同名函数隐藏与虚函数覆盖
2|11.几种必须区分的情况
派生类函数形式 | 与基类同名函数的关系 | 形参列表 | 绑定方式 |
---|---|---|---|
非虚函数 | 隐藏基类同名函数 | 可相同可不同 | 静态绑定 |
虚函数 | 覆盖基类虚函数 | 必须相同 | 动态绑定 |
使用基类的引用或指针调用虚函数时,会发生动态绑定
- 当派生类有基类的同名虚函数且该函数不是虚函数时,无论两个同名函数的参数是否相同。
- 由于派生类的作用域嵌套在基类内部,所以都会隐藏同名的基类函数
- 由于不是虚函数,所以即使两函数参数相同,也不会发生动态绑定
-
当派生类有基类的同名函数且该函数是虚函数时
-
参数列表相同,实现覆盖基类虚函数,可以发生动态绑定
-
参数列表不相同,相当于派生类定义了一个新函数,隐藏了基类虚函数,基类的虚函数没有被覆盖
-
2|22.一个更复杂的例子
例子出自《C++ Primer》P550
__EOF__
本文作者:萌之上
本文链接:https://www.cnblogs.com/timothy020/p/15959385.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/timothy020/p/15959385.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!