Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果按类型比较是糟糕的设计,在这种情况下我该怎么办?(多态性)_C++_Oop_Uml_Class Diagram - Fatal编程技术网

C++ 如果按类型比较是糟糕的设计,在这种情况下我该怎么办?(多态性)

C++ 如果按类型比较是糟糕的设计,在这种情况下我该怎么办?(多态性),c++,oop,uml,class-diagram,C++,Oop,Uml,Class Diagram,我有一个作业,我必须为原始游戏编写UML类图 在游戏中,有一些小的剪接场景,其中特定的实体(实体的子类)被操纵。因此,我制作了一个Cutscene类来管理它。我的问题是,我不想把我所有的实体子类都包含到Cutsecene中,因为它对我来说似乎没有必要(这也会使我的UML图看起来很混乱:p)。我宁愿让我的剪切场景包含我的实体类,然后以敌人的身份传入我的子实体,以进行检查,查看我处理的是哪个实体,以便我可以适当地操纵它们。(看起来更干净?) 然而,我在这里读到:以这种方式使用多态性是糟糕的设计。不过

我有一个作业,我必须为原始游戏编写UML类图

在游戏中,有一些小的剪接场景,其中特定的实体(实体的子类)被操纵。因此,我制作了一个Cutscene类来管理它。我的问题是,我不想把我所有的实体子类都包含到Cutsecene中,因为它对我来说似乎没有必要(这也会使我的UML图看起来很混乱:p)。我宁愿让我的剪切场景包含我的实体类,然后以敌人的身份传入我的子实体,以进行检查,查看我处理的是哪个实体,以便我可以适当地操纵它们。(看起来更干净?)

然而,我在这里读到:以这种方式使用多态性是糟糕的设计。不过,我似乎是出于不同的目的使用它

如果有人能告诉我,如果我是一个傻瓜,我应该做什么,那将不胜感激


< p>如果您想检查实体实例的类型,请查看“访问者”模式,该模式是在C++中执行双重调度的解决方案。
class EntityVisitor {
    virtual void Visit(const Ladder& ladder) = 0;
    virtual void Visit(const Mario& mario) = 0;
    ...
};
您的“实体”将有一个纯虚拟函数,它接受一个“访问者”

virtual Accept(EntityVisitor& visitor) = 0;
每个子类都实现了这个方法,并将它传递给访问者的Visit函数

void Mario::Accept(EntityVisitor& v) { 
    v.Visit(*this); // Calls the 'Mario' overload.
}

如果您想检查实体实例的类型,请查看“访问者”模式,该模式是在C++中执行双重调度的解决方案。

class EntityVisitor {
    virtual void Visit(const Ladder& ladder) = 0;
    virtual void Visit(const Mario& mario) = 0;
    ...
};
您的“实体”将有一个纯虚拟函数,它接受一个“访问者”

virtual Accept(EntityVisitor& visitor) = 0;
每个子类都实现了这个方法,并将它传递给访问者的Visit函数

void Mario::Accept(EntityVisitor& v) { 
    v.Visit(*this); // Calls the 'Mario' overload.
}

你的问题太模糊了。您需要向我们展示您的类的真实外观。您认为您的类在哪里使用多态性?我投票将此问题转移到主题所在的位置。@Serdalis在引用其他网站时,指出“是的,对不起,错误的部分,我是一个Nooby”通常会有所帮助。我们的问题很模糊。您需要向我们展示您的类的真实外观。您认为您的类在哪里使用多态性?我正在投票将这个问题转移到主题所在的位置。@Serdalis在引用其他网站时,指出“是的,对不起,错误的部分,我是一个noobThank”,这似乎是一个可行的解决方案,可以解决我试图实现的目标。现在就开始读吧。谢谢你,这似乎是一个可行的解决方案,可以实现我的目标。现在就开始读吧。