枚举作为具有返回值的类成员函数

enum as class member function with return value

本文关键字:成员 函数 返回值 枚举      更新时间:2023-10-16

我遇到以下问题:我需要使用enum枚举4个继承的类(在这一点上,除了enum之外,它们之间没有区别),然后通过一个名为"whoAmI"的虚拟函数返回类型,我不理解如何执行返回部分的语法以下是相关代码;

h级

virtual void whoAmI();
 enum gettype { easyTile, cropTile, waterTile, mediumTile};
in class.cpp
void tile::whoAmI()
{

}

您可以将函数的返回类型更改为enum的名称,然后使用= 0声明基类是纯虚拟的。

class ITile
{
public:
    enum class EType { easy, crop, water, medium };
    virtual EType whoAmI() const = 0;
};

然后派生类可以override这个方法返回正确的enum类型,例如

class EasyTile : public ITile
{
public:
    EasyTile() = default;
    EType whoAmI() const override { return EType::easy; }
};
class CropTile : public ITile
{
public:
    CropTile() = default;
    EType whoAmI() const override { return EType::crop; }
};

因此,作为一个例子(现场演示)

int main()
{
    std::vector<std::unique_ptr<ITile>> tiles;
    tiles.emplace_back(new EasyTile);
    tiles.emplace_back(new CropTile);
    for (auto const& tile : tiles)
    {
        std::cout << static_cast<int>(tile->whoAmI()) << std::endl;
    }
}

将输出

0
1

你可以很容易地这样做:

class TileBase
{
public:
    enum Type { easyTile, cropTile, waterTile, mediumTile };
    virtual Type whoAmI() const = 0;
    virtual ~TileBase() = default;
};
class EasyTile : public TileBase
{
    Type whoAmI() const override { return easyTile; }    
};

您需要将enum Type指定为返回类型,而不是void

#include <iostream>
using namespace std;
class Tile{
public:
    enum getType { easyTile, cropTile, waterTile, mediumTile};
    virtual getType whoAmI(){}
};
class easyTile:public Tile{
public:
    getType whoAmI(){return getType::easyTile;}
};
class cropTile: public Tile{
public:
    virtual getType whoAmI(){return getType::cropTile;}
};
class waterTile: public Tile{
public:
    virtual getType whoAmI(){return getType::waterTile;}
};
class mediumTile: public Tile{
public:
    virtual getType whoAmI(){ return getType::mediumTile;}
};
int main() {
    Tile *T = new cropTile;
    cout << T->whoAmI() << endl;
    delete T;
    return 0;
}

输出:1