处理C++继承时的最佳做法
Best practice when dealing with C++ inheritance
我想知道在下面的场景中,哪种做法是正确的/理想的,以及我是否有任何其他选择。
假设我有一个从另一个类继承的类。
class A { };
class B : public A { };
class C : public A { };
我维护一个 A 指针(基类(的映射。这些实际上是派生的 B 类或 C 类。
现在,假设我想对映射中的一个派生类指针执行操作 x。我看到有两种方法可以做到这一点。
1] 将基类类型转换为派生类并对其进行操作。这是一个好的做法吗?
2] 在基类中有一个可用的虚函数,这样你就可以在没有类型转换的情况下进行操作。我觉得这里的问题是某些方法可能真正属于派生类,而不是基类。我的意思是,适用于派生类 B 的方法可能不适用于派生类 C。在 A 上有一个纯虚函数让我感到不舒服。拥有纯虚拟,这是一种好的做法吗?或者可以做什么?
虚拟函数专门设计为通过指向基类的指针与基于或派生的对象一起工作。因此,如果所有类都支持操作 x((,您将获得运行时多态性。
但是,如果只有 C 支持 x((,那么指向对象 A 和 B 的指针需要什么行为?可能只是单独存储一系列指向 C 的指针?在这种情况下,您不需要继承。
您可以在类 A 中为 x(( 指定一些空实现 - 如果您不需要类 A 的对象,它可以是抽象的。这是通常的做法。
运行时强制转换具有时间成本,并且还涉及 if- 检查哪个具有性能开销。
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在c代码之间共享数据的最佳方式
- 使用std::source_location报告错误的最佳实践
- 派生类销毁的最佳实践是什么
- 将寄存器设计成可由C和C++访问的外设的最佳实践
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 检测win32服务创建和删除的最佳方法
- 在reactor中存储eventHandlers的最佳方式是什么
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 在AVX通道中混洗的最佳方式
- 程序顶部的声明与定义(最佳实践)
- 别名模板的专业化 C++11 中没有开销的最佳替代方案