簡體   English   中英

從基本類型的函數返回派生類對象

[英]Returning a Derived Class Object from a function of the Base Type

說我有三類,一種叫做角色,一種是獸,另一種是人類。 人與獸都是源於性格。 無論如何,有沒有創建一個character類型的函數,並且該函數內部可以返回從ork或human類創建的對象。 也許還有另一種方法可以從同一函數返回ork或人類對象。

編輯:沒關系的人,事實證明,當我較早嘗試時,我意外地從另一個類別衍生了獸人。 實際上,可以從基本類型的函數返回派生類。 為了清楚起見,這就是我在做什么。

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; } }

首先,我們要返回一個派生類的 ,這很簡單:

struct Derived;

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

struct Derived: Base {};

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

但是使用這種方法,如果foo返回Derived1Derived2 ,則其返回類型必須是這兩個(或更高)的公共基類,然后將結果切成該基類。

因此,對於多種可能的動態返回類型,您需要返回一個指針或引用,例如,

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您需要在Base類中具有虛擬析構函數,以支持簡單的delete表達式。

免責聲明:編譯器未觸及任何代碼。

如果我正確地描繪了圖片,則您需要在基類Character中添加一個純虛函數,並且整個函數將在Human和Orc的派生類中使用。

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

    virtual  HRESULT  Characterfunc() = 0; 

private: 

}

然后在派生類中:

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

  HRESULT Characterfunc();      

private:

}

最后一個:

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

  HRESULT Characterfunc();      

private:

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM