【发布时间】:2011-06-06 14:12:45
【问题描述】:
假设我得到了一个充满继承的 C++ 库。当我知道函数实际上指向Derived 对象并且Derived 继承Base 时,我在函数中得到了Base*。但我不知道它是哪种继承(公共/受保护/私有)。我也不知道层次结构中有没有虚函数。
鉴于这种情况,不查看Base 和Derived 的源代码/文档,我应该使用哪个演员表?还是我应该先查阅代码/文档以确保多态性?
背景
我正在 Qt 4.7 中编写 QMainWindow 的 changeEvent 函数。 changeEvent 函数采用 QEvent*,我可以通过知道 QEvent::type() 将其转换为其他类型。我想知道我应该使用static_cast 还是dynamic_cast。
谢谢。
【问题讨论】:
-
如果你使用的任何库使用
protected继承,是时候寻找更好的编写库了。 -
这个问题可能会有所帮助:stackoverflow.com/questions/28002/…
-
@Zac:希望我能对 cmets 投反对票。如果您不知道该库的作用,您如何判断受保护的继承是否是适合这项工作的工具?
-
@DeadMG:
protected继承绝对没有用。private继承有其用途(尽管应该谨慎使用),但protected完全没用。 -
@DeadMG:我倾向于同意 Zac,
protected确实是一个奇怪的可访问性级别 - 对某些功能(主要是构造函数/析构函数)有些有用,它通常对属性,我无法理解哪种奇怪的继承层次结构实际上会需要受保护的继承。