模拟进化类的最佳编程实践是什么?

时间:2016-11-21 14:20:39

标签: c++ inheritance

假设我有两个类:

class SwordsMan{
  /*...*/
  virtual SwordsMan* evolve()
};

class Warrior: public SwordsMan{
  /*...*/
};

我想要的目标是,一旦有足够的经验,剑士就会演变为战士。实现这个evolve()函数的最佳实践是什么,因为我想在他演化后删除“this”SwordsMan对象?

1 个答案:

答案 0 :(得分:2)

分离对象通常是一个更好的主意。从他们一生的管理实施。

class SwordsMan {
  virtual std::unique_ptr<SwordsMan> evolve();
};

class Warrior: public SwordsMan { };

在上面的第一层中,代码可能如下所示:

auto swordsMan = std::make_unique<SwordsMan>(); // Get a swordsman

if(auto evolved = swordsMan->evolve()) // Ask him to evolve
    swordsMan = std::move(evolved); // Replace him

如果您只想在升级剑客时拨打evolve(),可以放弃if

swordsMan = swordsMan->evolve();