在Sutter& Alexandrescu的编码标准书中找到的类设计指南,其中包括使基类抽象化,使得人们无法实例化它们。这是为了防止a.o.切片和多态分配和复制的问题。
然而,当使用类似于例如的类库时Qt,通常的做法是从库中的concrdete类继承以添加其他行为。例如,可以创建一个继承自QListBox的类MyListBox,为我的应用程序中的所有列表框添加特定于应用程序的行为。
这种常见做法如何与具有非实例化基类的建议相协调?
答案 0 :(得分:2)
您的第一句话包含您正在寻找的答案:
Sutter& Alexandrescu编码标准书中的课程设计指南
(强调我的)。
就是这样 - 一条指南,而不是刻在石头上的规则。
如果您有特定的技术限制,例如在您正在使用的库中,如果在特定时刻给定的替代方案更糟糕(例如必须使用三元组的模式),可能忽略它代码总量或必须重写库。)
我的答案的全部要点:所有这些模式,指南和最佳实践都是您实现编程目标的手段。他们自己不是目标。
答案 1 :(得分:2)
该指南仅适用于不应实例化的基类(通常因为这样做没有意义)。在您的示例中不是这种情况:例如,仅仅因为您从QDialog
继承并不意味着您不希望在代码中的其他位置使用普通的旧QDialog
。