假设我有三个类别,一个叫做角色,一个是ork,一个是人类。 人类和兽人都来自人格。 无论如何都要创建一个类型字符的函数,并且在函数内部能够返回从ork或human类创建的对象。或者也许还有另一种方法可以从同一个函数中返回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;
}
}
答案 0 :(得分:1)
我们首先要说你想要返回派生类的值,这很简单:
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
表达式。
免责声明:编译器未触及任何代码。
答案 1 :(得分:0)
如果我的图像正确,你需要在基类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:
}