c++ - 什么是类型字段?
问题描述
我正在学习 c++ 。在“Type Fields
我的书”主题下,有以下内容:
为了在声明中使用派生类不仅仅是一种方便的简写,我们必须解决以下问题:给定一个 type 的指针,指向
Base*
的对象真正属于哪个派生类型?这个问题有四个基本的解决方案:
- 确保仅指向单一类型的对象。
- 在基类中放置一个类型字段以供要检查的函数。
- 利用
dynamic_cast
- 使用虚函数
我的问题 - 真正的类型字段是什么,该段落试图解决的问题是什么?
解决方案
这本书似乎在暗示这样的事情:
struct FruitBase
{
protected:
enum class EFruit
{
Apple,
Plum,
};
FruitBase(EFruit type): type{type} {}
public:
EFruit type;
void prepare()
{
if(type == EFruit::Plum)
extractSeed();
else if (type == EFruit::Apple)
peel();
}
};
struct Apple: public FruitBase
{
Apple() : FruitBase{EFruit::Apple} {}
};
struct Plum: public FruitBase
{
Plum() : FruitBase{EFruit::Plum} {}
};
现在,FruitBase::prepare
可以根据派生类型进行正确的操作。
推荐阅读
- android - 在工具窗口选项中启用启动后,Android 模拟器停止工作
- python - 如何检查整个输入字符串(用空格分隔的实数)是否与 Python 中的正则表达式匹配?
- python - 如何使用 pandas 正确读取 csv?
- java - Java Date .after() 方法未正确比较 12:00
- javascript - jquery 上下文菜单插件详细信息
- javascript - 添加到使用状态不起作用的状态?
- microsoft-graph-api - 将 MSGraph 身份验证添加到使用 yo 团队生成的团队机器人
- python - 如何使用python在botframework中发送主动消息
- c# - Console.SetOut 不适用于 ConsoleLogger
- r - 如何解决此问题“h2o.upload_model() 中的错误:找不到函数“h2o.upload_model”?