[英]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
返回Derived1
或Derived2
,則其返回類型必須是這兩個(或更高)的公共基類,然后將結果切成該基類。
因此,對於多種可能的動態返回類型,您需要返回一個指針或引用,例如,
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.