用派生类调用重载方法

用户名

我无法对派生类做任何事情。基本上,我有一个带有交互方法的基类,该方法将另一个基类对象作为参数。然后,我有一个派生类,并且我希望它重载interact方法-派生类对象应该以自己的样式进行交互。到目前为止,到目前为止,使用虚拟方法可以得到我想要的行为。但是,我也想重载interact方法,以便它可以将派生的类对象作为参数。

现在,我有一个带有baseclass参数的对象。当我使用派生类作为参数创建这样的对象并使其与另一个也使用派生类作为参数创建的对象交互时,它确实调用了派生类的interact方法(如预期的那样),但考虑使用基类的方法范围。有没有办法让它使用其他方法?

下面的代码,我希望它可以更清楚

#include <iostream>

class BaseClass{
public:
    BaseClass();
    virtual ~Baseclass();

    virtual void interact(BaseClass* interaction_target){std::cout << "base class interaction" << std::endl;}
};

class DerivedClass : BaseClass{
public:
    DerivedClass();
    virtual ~DerivedClass();

    virtual void interact(BaseClass* interaction_target){std::cout << "derived class interaction" << std::endl;}
    virtual void interact(DerivedClass* interaction_target){std::cout << "interaction eased by the fact that two DerivedClass object are interacting" << std::endl;}
};

class MyObject{
protected:
    BaseClass* interactor;
public:
    MyObject(BaseClass* param) : interactor(param){}
    virtual ~MyObject();

    void ObjectInteraction(MyObject interaction_target){interactor->interact(interaction_target.interactor);}
};

int main(){

MyObject first_obj(new DerivedClass());
MyObject sec_obj(new DerivedClass());

first_obj.ObjectInteraction(sec_obj); // prints derived class interactions, whereas I would like
// it to use the second method ie. interact(DerivedClass*)
return 0;
}

无论如何有做吗?

约翰·兹温克

是的。您在此处尝试执行的操作称为“双重调度”,或更笼统地说,称为“多重调度”C ++不直接支持它(某些语言支持),但是您可以使用Visitor Pattern自己实现它

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章