模板类与抽象类

Ste*_*fan 4 c++ oop

所以我开始回顾我的一些OOP课程,我发现了这个问题:模板类和抽象类有什么区别?什么时候应该使用而不是另一个?

我知道模板类的实例化方式与函数相同.创建一个副本,模板参数替换为实际数据类型.抽象类具有纯虚函数,无法实例化.派生类必须定义虚函数.

Dan*_*lli 5

它们都是C++提供的工具,用于更改应用程序的一部分(即可扩展性和重用)的实现和/或行为.

主要区别在于抽象类(运行时多态)是一种运行时机制,而模板是一种编译时机制.这意味着通过使用抽象类,您可以在运行时更改行为(例如,通过在运行时加载配置文件,或通过插件).相反,使用模板,您可以在编译时绑定您的实现(即,开发人员一次性静态地决定所有行为).

作为运行时机制,抽象类由于虚函数而带来运行时开销.模板不会遇到此问题.

另一方面,目前(C++ 14标准)你不能为类模板指定一个接口(即,你没有可以绑定到模板的类的规范,如果你试图实例化一个模板类绑定错误的类,你会得到难以理解的编译器错误).而抽象类实际上是您可以使用的具体类的"规范".