首页 > 解决方案 > 什么是类型字段?

问题描述

我正在学习 c++ 。在“Type Fields我的书”主题下,有以下内容:

为了在声明中使用派生类不仅仅是一种方便的简写,我们必须解决以下问题:给定一个 type 的指针,指向Base*的对象真正属于哪个派生类型?这个问题有四个基本的解决方案:

  1. 确保仅指向单一类型的对象。
  2. 在基类中放置一个类型字段以供要检查的函数。
  3. 利用dynamic_cast
  4. 使用虚函数

我的问题 - 真正的类型字段是什么,该段落试图解决的问题是什么?

标签: c++

解决方案


这本书似乎在暗示这样的事情:

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可以根据派生类型进行正确的操作。


推荐阅读