我开始回顾我的面向对象编程课程,发现有这样一个问题:什么是模板类和抽象类的区别?在什么情况下应该使用其中之一而不是另一个? 我知道模板类的实例化方式与函数相同。使用实际数据类型替换模板参数并创建副本。抽象类具有纯虚函数,不能被实例化。派生类必须定义虚函数。
他们都是 C++ 提供的工具,用于改变应用程序的实现和/或行为(即可扩展性和重用)。主要区别在于抽象类(运行时多态性)是一种“运行时”机制,而模板是一种“编译时”机制。这意味着使用抽象类可以在运行时可能更改行为(例如通过在运行时加载配置文件或使用插件)。相反,使用模板则将实现绑定到编译时(即开发人员在静态条件下决定一次性行为)。作为一种运行时机制,由于虚函数的存在,抽象类会带来运行时开销。而模板不受此影响。另一方面,在当前的 C++14 标准中,您无法为类模板指定接口(即您没有可以绑定到模板的类的规范,如果尝试实例化绑定错误的类模板,则会收到难以理解的编译器错误)。相反,抽象类实际上是您可以使用的具体类的“规范”。