从基本类型的函数返回派生 Class 对象

Returning a Derived Class Object from a function of the Base Type

假设我有三个 classes,一个叫 character,一个叫 ork,一个叫 human。 人类和兽人都源于性格。 无论如何创建一个字符类型的函数并且在该函数内部能够 return 从兽人或人类 classes 创建的对象。或者也许还有另一种方法 return 从同一个函数中获取 ork 或 human 对象。

编辑:别介意伙计们,事实证明,当我早些时候尝试这个时,我不小心从不同的 class 派生了 ork 和 human。实际上可以从基本类型的函数 return 派生 class。 只是为了清楚这就是我在做什么。

character game::getPlayer(char symbol) { switch (symbol) { case 'E': return elfPlayer; break; case 'G': return guardPlayer; break; case 'K': return knightPlayer; break; case 'R': return roguePlayer; break; case 'W': return wizardPlayer; break; } }

如果我描述正确,你需要在基础 class 角色中使用一个纯虚函数,并且整个函数将用于派生的 class 人类和兽人中。

class  Character
{
   public: 
       Character();
    virtual ~Character();

    virtual  HRESULT  Characterfunc() = 0; 

private: 

}

然后在派生的 classes 中:

 class  Ork :  public Character
{
   public: 
         Ork();

  HRESULT Characterfunc();      

private:

}

最后一个:

 class  Human :  public Character
{
   public: 
         Human();

  HRESULT Characterfunc();      

private:

}

首先假设你想return派生class的,这很简单:

struct Derived;

struct Base { auto foo() -> Derived; };

struct Derived: Base {};

auto Base::foo() -> Derived { return {}; }

但是使用这种方法,如果 foo 是 return Derived1Derived2,那么它的 return 类型必须是通用的这两个(或更高)的基数 class,然后结果将被切成基数 class.

因此,对于多个可能的动态 return 类型,您需要 return 指针或引用,例如,

struct Base
{
    auto foo() -> unique_ptr<Base>;
    virtual ~Base() {}
};

struct Derived1: Base {};
struct Derived2: Base {};

auto Base::foo()
    -> unique_ptr<Base>
{ return {garble_voff? new Derived1 : new Derived2}; }

当直接使用简单的 unique_ptr 时,您需要在 class Base 中有一个虚拟析构函数,以支持简单的 delete 表达式。

免责声明:none 编译器触及的代码。