在本章中,我们学习了为什么构造函数不能被声明为虚函数,以及当确实需要“虚构造函数”时该如何应对。我们了解了如何使用工厂模式,及其变体来构造和复制那些类型在运行时才确定的对象。我们还探讨了工厂构造函数的几种不同实现方式,在代码组织以及行为委托给系统不同组件的方式上各不相同,并比较了各自的优缺点和权衡取舍。还看到了多种设计模式之间是如何相互作用的。
尽管在 C++ 中,构造函数必须始终使用要构造对象的真实类型来调用 —— 这是强制性的 —— 但这并不意味着应用程序代码必须显式指定完整的类型。工厂模式使我们能够编写间接指定类型的代码,例如使用一个在别处与类型关联的标识符(创建第三种类型的对象),或与之关联的对象类型(创建与这种建筑类型对应的单位),甚至可以是相同的类型(复制这个对象,不管具体是什么类型)。
接下来,下一章中我们将介绍模板方法模式,这是经典的面向对象设计模式之一。在 C++ 中,它对我们设计类型层次结构的方式有着深远的影响。