C ++:高级层次结构

时间:2010-12-03 12:07:43

标签: c++ class inheritance height hierarchy

拥有类层次结构的运行时缺点是什么?

让我们调用H层次结构的 height (即:遍历从基类到叶子的类的数量)。

dynamic_cast费用更高:费用为O(H)

是否有其他操作员或语言功能受损?

3 个答案:

答案 0 :(得分:3)

主要问题是可维护性。深层次结构可能未正确建模。超过3-4级的任何东西都应该让你收到警报。你可能来自具体的课程,你永远不应该做的事情(Liskov Substitution principle不允许这样做)。如果您的基类充满了virtual函数(我的意思是不是纯粹),那么重构会很困难。

将基类拆分为几个不同的接口(Interface Segregation)。更喜欢继承的组合(软件设计的GoF fundamental rule)。

个人建议:尝试在没有dynamic_cast的情况下进行编程。当我是C ++开发人员时,我能够在没有dynamic_cast的情况下完全编程。我在适当的地方使用了设计模式,工厂,visitors等。没有演员表,生活更加简单: - )。

祝你好运!

答案 1 :(得分:1)

所有操作都可以在O(1)时间内实现,通常它们都是dynamic_cast除外。对于静态链接库,最后一个可以在O(1)时间内实现,请参阅here

答案 2 :(得分:0)

叶类的对象的构造和销毁需要更长的时间,因为层次结构中的所有构造函数都被调用(从基类到叶类)。