从叶类继承

时间:2011-02-27 13:14:20

标签: c++ class inheritance

在Sutter& Alexandrescu的编码标准书中找到的类设计指南,其中包括使基类抽象化,使得人们无法实例化它们。这是为了防止a.o.切片和多态分配和复制的问题。

然而,当使用类似于例如的类库时Qt,通常的做法是从库中的concrdete类继承以添加其他行为。例如,可以创建一个继承自QListBox的类MyListBox,为我的应用程序中的所有列表框添加特定于应用程序的行为。

这种常见做法如何与具有非实例化基类的建议相协调?

2 个答案:

答案 0 :(得分:2)

您的第一句话包含您正在寻找的答案:

  

Sutter& Alexandrescu编码标准书中的课程设计指南

(强调我的)。

就是这样 - 一条指南,而不是刻在石头上的规则。

如果您有特定的技术限制,例如在您正在使用的库中,如果在特定时刻给定的替代方案更糟糕(例如必须使用三元组的模式),可能忽略它代码总量或必须重写库。)

我的答案的全部要点:所有这些模式,指南和最佳实践都是您实现编程目标的手段。他们自己不是目标。

答案 1 :(得分:2)

该指南仅适用于不应实例化的基类(通常因为这样做没有意义)。在您的示例中不是这种情况:例如,仅仅因为您从QDialog继承并不意味着您不希望在代码中的其他位置使用普通的旧QDialog