gpt4 book ai didi

c++ - 在这种特定情况下,多重继承有那么糟糕吗?

转载 作者:行者123 更新时间:2023-12-01 14:52:18 25 4
gpt4 key购买 nike

目前我正在尝试理解 MI 的“邪恶”。我刚刚在 youtube 上观看了一个视频,其中一个 js 家伙反对继承。这是他的例子(我用 C++ 重写了它):

struct Robot
{ void drive(); };

struct MurderRobot : public Robot
{ void kill(); };

struct CleanerRobot : public Robot
{ void clean(); };

struct Animal
{ void poop(); };

struct Dog : public Animal
{ void bark(); };

struct Cat : public Animal
{ void meow(); };

然后他建议了一个新类(class) MurderRobotDog ,在他看来,这不能通过继承优雅地完成。当然,它不能通过单继承来完成。但我认为用 MI 做这件事没有任何问题。

我认为我们可以创建一个基类 BarkingObject ,这将有所有吠叫的东西。然后 Dog 继承自 Animal ,它有共同的 poop() 和 BarkingObject .当你需要一个杀狗机器人时,它必须从 BarkingObject 继承。和 MurderRobot .这更有意义。 MurderRobotDog不能从活的生物继承,因为那样它就会变成活的,这与机器人的定义相矛盾。当然,为此您必须使用被许多人认为是 EVIL 的多重继承。不幸的是,如果没有它,我们似乎无法有效地重用不同的不相关(你不需要 poop() 来调用 bark(),并且机器人案例证实了这个断言)功能。

你反对我的建议的理由是什么?

最佳答案

多重继承实现是解决这类问题的一种老式方法。

组合是新的方式。

您定义描述特定行为或一组行为的接口(interface):

struct Murderer
{
virtual ~Murderer() = default;
void kill();
};

struct Pooper
{
virtual ~Pooper() = default;
void poop();
};

实际的事物,例如猫、狗或机器人,会相应地继承(即实现)这些接口(interface)。您使用 dynamic_cast或类似的运行时技术,在执行适当的操作之前查询对象的接口(interface)。

关于c++ - 在这种特定情况下,多重继承有那么糟糕吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62426944/

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