c++ - 多态实现
问题描述
假设我有 A 类,B 类继承 A,C 类也继承 A。C 类有方法 F,而 B 类没有。
class A {
//Some stuffs
};
class B : public A {
//Some stuffs.
};
class C : public A {
void F ();
};
我的问题是,当我有一个我不完全知道它属于哪个类的对象(它可以是 B 或 C)时,我想使用类 A 的指针检查该对象,以及该对象是否属于类 C,那么我想调用方法 F。我如何实现这些类?
我想要这样的东西。
A *_a = Something;
if (_a is pointing to object of class C){
_a->F;
}
现在,我正在考虑将方法 F 作为 A 类中的虚拟方法,但我认为这不是一个真正好的方法,因为只有 C 类实际上有它,如果我就是这样做的,对于我想要在 C 类中的每个方法,我也必须将它添加到 A 类中。有什么解决方法吗?
解决方案
如果这确实是您想要坚持的设计,您首先需要有一个虚拟基础(例如通过在A
:中声明析构函数虚拟virtual ~A() = default;
,然后您可以简单地执行以下操作:
if(typeid(*_a) == typeid(C)) {
static_cast<C*>(_a)->F();
}
推荐阅读
- c++ - 使用 QProcess 调用带有参数的外部程序
- java - 使用 Android SDK 21 将新文件写入可移动存储中的其他应用程序数据目录时出错
- javascript - Axios 刷新令牌得到 401
- ns-3 - 在 NS3 中执行 Randomwalk2dmobility 时发生错误
- c++ - 为什么 mysql_init(nullptr) 会导致以下代码中的分段错误?
- upgrade - @author 在大量修改别人的代码时
- c# - UWP FolderPicker - 显示以父级为中心的对话框窗口
- graphql - 在单独的查询中加载 __typename 字段 Apollo-Client 未更新 UI
- xslt - 使用 XSLT,如何让文本插入仅出现在最后一段之后?
- reactjs - 更改 DOM 元素之间的反应类状态