模板类vs抽象类
Template class vs Abstract class
所以我开始回顾我的一些OOP课程,我发现了这个问题:模板类和抽象类之间的区别是什么?什么时候应该使用其中一个而不是另一个?
我知道模板类的实例化方式与函数相同。创建一个副本,模板参数被替换为实际的数据类型。抽象类具有纯虚函数,不能被实例化。派生类必须定义虚函数。
它们都是c++提供的工具,用于改变应用程序的一部分的实现和/或行为(即可扩展性和重用)。
主要区别在于抽象类(运行时多态性)是一种运行时机制,而模板是一种编译时机制。这意味着,通过使用抽象类,你可以在运行时改变行为(例如,通过在运行时加载配置文件,或通过插件)。相反,使用模板,您可以在编译时绑定实现(即,由开发人员静态地一次性决定所有行为)。作为一种运行时机制,抽象类由于虚函数而带来运行时开销。模板没有这个问题。
另一方面,目前(c++ 14标准)你不能为你的类模板指定接口(也就是说,你没有一个可以绑定到你的模板的类的规范,如果你试图实例化一个绑定错误类的模板类,你会得到难以理解的编译错误)。抽象类实际上是你可以使用的具体类的"规范"。
相关文章:
- 无法创建抽象类的实例
- 用pybind11包装C++抽象类时出错
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 有没有办法按值将纯抽象类的所有子类传递给 C++ 中的函数?
- 抽象类错误,请参阅声明" "是抽象的
- 将自定义函数传递到基抽象类中以延迟执行
- 将包含抽象类和普通类C++包导出到 Python
- C++:处理抽象类中的错误时出现问题
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- 在 C++ 中使用另一个头文件中的抽象类
- ATL::CComContainedObject<contained>: C2259 无法实例化抽象类
- C++:从抽象类重写纯虚拟运算符重载
- 如何创建shared_ptr抽象类的容器
- .h 或.cpp文件中的抽象类或两者兼而有之?
- 从抽象类继承以创建另一个抽象类时,我应该重新声明所有虚函数吗?
- E0322:不允许使用抽象类类型 " " 的对象
- 可视抽象类 c++(错误 LNK 2001:未解析的外部符号)
- 提升 - 类没有名为"序列化"的成员(抽象类)?
- VS c++编译器会错过一个抽象类的实例化吗?
- 模板类vs抽象类