什么是类型字段?
我正在学习 C++ 。在“Type Fields我的书”主题下,声明如下:
为了在声明中使用派生类不仅仅是一种方便的简写,我们必须解决以下问题:给定一个类型的指针,所指向
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可以根据派生类型进行正确的操作。