C++ 枚举为返回值的类成员函数

C++ 枚举为返回值的类成员函数,c++,enums,return,C++,Enums,Return,我遇到以下问题: 我需要使用enum枚举4个继承类(此时它们与enum没有区别),然后通过一个名为“whoAmI”的虚拟函数返回类型,我不理解如何执行返回部分的语法 以下是相关代码 在课堂上 virtual void whoAmI(); enum gettype { easyTile, cropTile, waterTile, mediumTile}; in class.cpp void tile::whoAmI() { } 您可以将函数的返回类型更改为enum的名称,然后使用=0声

我遇到以下问题: 我需要使用enum枚举4个继承类(此时它们与enum没有区别),然后通过一个名为“whoAmI”的虚拟函数返回类型,我不理解如何执行返回部分的语法 以下是相关代码

在课堂上

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;
};
例如,派生类可以重写此方法以返回正确的
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; }
};
例如()


您可以轻松地这样做:

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; }    
};
您知道,您需要将
枚举类型
指定为返回类型,而不是
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;
}
使用名称空间std; 类瓷砖{ 公众: 枚举getType{easyTile,cropTile,waterTile,mediumTile}; 虚拟getType whoAmI(){} }; 类easyTile:公共瓷砖{ 公众: getType whoAmI(){return getType::easyTile;} }; 类别:公共瓷砖{ 公众: 虚拟getType whoAmI(){return getType::cropTile;} }; 类别:公共瓷砖{ 公众: 虚拟getType whoAmI(){return getType::waterTile;} }; 类别mediumTile:公共Tile{ 公众: 虚拟getType whoAmI(){return getType::mediumTile;} }; int main(){ 瓷砖*T=新的十字线;
CUTHOMII:(更改代码<空VI/S> >代码> GETType < /Cord>?这是基本C++ +代码> GETType WHOMAIE()/CUT>。我建议你拿起一个并读它。BTW:“GETType”是一个非常奇怪的名词(甚至用英语)。人们会期待一些类似“Tielype”的东西。非常感谢你的大意和切题答案。
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; }    
};
#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;
}