切换语句和多态

时间:2018-05-09 07:01:11

标签: c++ switch-statement polymorphism

我目前对动态多态感到困扰。我有一个switch语句,它将根据条件执行不同的任务:

switch (condition)
{
   case a:
      foo();
      doSomethingA();
   case b:
      foo();
      doSomethingB();
   case c:
      foo();
      doSomethingC();
}

我想用虚拟方法doSomething()创建一个基础对象,并让此函数执行BasePtr->doSomething()

我需要根据这个条件制作一个合适的对象类型,所以据我所知,我无法避免这种转换。

它只会重构为:

std::unique_ptr<Base> base;
switch (condition)
{
   case a:
      base = std::make_unique<DerivedA>();
   case b:
      base = std::make_unique<DerivedB>();
   case c:
      base = std::make_unique<DerivedC>();
}

base->doSomething();

这似乎不是一个完整的解决方案。此switch语句仅使用一次,并且取决于条件的整个逻辑随后结束。此解决方案不会将其他switch语句压缩到基本开关中,这表示要创建的对象。你怎么看待这个问题?

1 个答案:

答案 0 :(得分:0)

它尽可能紧凑。你需要一种方法来配置你的基础,在你的情况下你使用了一个switch-case。

考虑下面的例子......

Pokemon* pokemon;

switch( mySelection ){
   case 1: pokemon = new Pikachu(); break;
   case 2: pokemon = new Bulbasaur(); break;
   case 3: pokemon = new Charmander(); break;
   default: pokemon = null;
}

if (pokemon!=null)
    pokemon-> specialAttack();