gpt4 book ai didi

c++ - 为什么可以用多态来代替switch或else-if语句?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:25 24 4
gpt4 key购买 nike

我对帖子中的内容感到有些困惑:case-vs-if-else-if-which-is-more-efficient

有人多次建议应该使用多态来代替长的 case/if-else 语句。我正在努力弄清楚这到底意味着什么。你如何替换:

case TASK_A:
// do things for task A
break;
case TASK_B:
// do things for task B
break;
:
:
case TASK_J:
// do things for task J
break;

多态性?如果“做......”部分基本上是相同的重复,我可以理解它,但如果部分或所有“案例”之间存在显着差异,那么这是否仍然适用?

最佳答案

在您链接到的示例中,开关 覆盖对象的类型,建议使用多态性来消除检查类型的需要。也就是说,在基类中声明一个虚函数,为每个具体类覆盖它以执行任何需要做的事情,并用对该函数的调用替换整个 switch

在您的例子中,您正在测试变量的值,而不是对象的类型。但是,如果需要,您可以将其转换为多态解决方案:

struct Task         {virtual void do_things() = 0;};
struct TaskA : Task {virtual void do_things() {/*do things for task A*/}};
struct TaskB : Task {virtual void do_things() {/*do things for task B*/}};
//...
struct TaskJ : Task {virtual void do_things() {/*do things for task J*/}};

然后您可以用指向Task 的(智能)指针替换您正在切换的变量;并使用 task->do_things() 进行切换。这是否比 switch 好是个人喜好问题。

关于c++ - 为什么可以用多态来代替switch或else-if语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19158240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com