假设我有三个类别,一个叫做角色,一个是兽人,一个是人类。 人类和兽人都源于性格。 无论如何创建一个字符类型的函数并且在该函数内部能够返回从 ork 或人类类创建的对象。或者也许还有另一种方法可以从同一函数返回 ork 或 human 对象。
编辑:别介意伙计们,事实证明,当我早些时候尝试这个时,我不小心从不同的类派生了 ork 和 human。实际上可以从基类型的函数返回派生类。 需要说明的是,这就是我所做的。
角色游戏::getPlayer(char symbol) {
开关(符号){
案例“E”:
返回 Sprite 播放器;
休息;
案例'G':
返回 guardPlayer;
休息;
案例'K':
返回骑士玩家;
休息;
案例“R”:
返回 roguePlayer;
休息;
案例'W':
返回向导播放器;
休息;
}
}
最佳答案
首先假设你想返回一个派生类的值,这很简单:
struct Derived;
struct Base { auto foo() -> Derived; };
struct Derived: Base {};
auto Base::foo() -> Derived { return {}; }
但是使用这种方法,如果 foo
要返回 Derived1
或 Derived2
,那么它的返回类型必须是公共(public)基类这两个(或更高)的类,然后结果将被切片到该基类。
因此,对于多种可能的动态返回类型,您需要返回一个指针或引用,例如,
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
表达式。
免责声明:编译器未触及任何代码。
关于c++ - 从基类型的函数返回派生类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35825517/