欢迎光临散文网 会员登陆 & 注册

Effective C++ 第三十七条 Never redefine a function’s inherited defaul

2023-02-16 05:57 作者:九思519  | 我要投稿

绝不重新定义继承而来的缺省值参数

上一章说了,derived 不要重载 base 的 non-virtual 函数,本章节只讨论重载 virtual 函数,明确了动态绑定和静态绑定的区别,静态绑定就是以对象的方式调用,动态绑定就是以指针的方式调用,直接说结论,virtual 函数继承,函数是动态绑定的,参数是静态绑定的。

在这里,pd、pb 的静态类型就是其声明类型 (base),pd 的动态类型就是其对象类型 derived,pb 的动态类型是 base。pb、pd 调用的 fun 分别属于 base、derived,但是其参数却都是属于 base 的 1. pd 调用 fun 的默认参数并非 derived 中声明的 2,即使 pd 是 derived 类型。注意,这里的静态类型动态类型不同于前面的静态绑定和动态绑定。

这段代码会报错,因为 d 没有指定参数,这里为什么 derived::fun 没有继承 base::fun 的缺省参数呢?因为 C++ 中静态绑定不会继承 base 缺省值,只有动态绑定才会继承父类缺省值。这样就是为什么用对象会报错,而用指针不会。而且出现 pdd 不会继承 base 的 x,而 pbd 会继承 base 的 x。


Effective C++ 第三十七条 Never redefine a function’s inherited defaul的评论 (共 条)

分享到微博请遵守国家法律