简而言之,如何在 C++ 中为单级继承创建接口(出于简单和教学的原因)?我看到一些代码没有使用多态性,但基类包含一个虚拟抽象方法 ( virtual void TheMethod() = 0
)。
现在从这个抽象类派生了一个类,使用纯虚方法,但是在随后的代码中,使用派生类的实例根本没有动态分配。
这是正确的方法吗?使用多态设计推断的开销如何?
我认为这是不可能的..这看起来更像是隐藏/重影基本方法,即使该方法是纯虚拟方法。
稍后编辑:感谢所有设法提供一些好的答案的人,我想强调一个由使用“动态分配”引起的严重错误,其含义是强调这种对象创建可能性是唯一与多态性兼容的. 很明显,这不是利用这种运行时调用行为的唯一方法(但可能是最常见的方法?),而是进一步澄清我最初的问题:
有没有办法强制程序员在不使用纯虚拟方法的情况下实现方法?我可能不合理的担忧是,是否打开了多态设计的大门是否在性能方面也有点沉重(讨论中的方法每秒有数千次这样的调用)。
甚至后来的编辑:使基础具有受保护的构造函数意味着它不能直接实例化(除了使用工厂或其他友好方式),这可以解决纯虚方法引起的影响之一的补偿。但是如何确保任何派生类仍然提供自己的方法实现呢?如果对关联的 vtable 的担心可能有点夸张真的没什么大不了的,我会坚持使用纯虚拟方法(因为 SFINAE 奇怪的重复模板模式更难被不熟悉的人阅读和理解)最少的中级 C++ 程序员 - 像我一样 :) )。