c ++中的动态多态和函数重载

GiC*_*iCo 1 c++ polymorphism

带有多态对象的函数重载是否适用于C++.我希望实现类似于下面的代码的行为.

编辑:我希望setInput为每个派生类提供不同的功能.这task.setInput(derived2)要求setInput(BaseClass* object),它摧毁了我.允许小姐使用api.所以我认为我必须在方法中切换功能.我想使用dynamic_cast会这样做吗?多谢.:-)

class BaseClass { virtual void xy() .. }
class Derived1Class : BaseClass { .. } 
class Derived2Class : BaseClass { .. } 
class Derived3Class : Derived2Class { .. } 

class Task {
    void setInput(BaseClass* object);
    void setInput(Derived1Class* object);
    void setInput(Derived2Class* object);
    void setInput(Derived3Class* object);
}

main() {
   BaseClass* base = new BaseClass();
   Derived1Class* derived1 = new Derived1Class();
   BaseClass* derived2 = new Derived2Class();
   Derived2Class* derived3 = new Derived3Class();
   Task* task =  new Task();
   task.setInput(base);
   task.setInput(derived1);
   task.setInput(derived2);
   task.setInput(derived3);
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*rew 5

函数重载是在编译时根据参数的静态类型完成的,而不是在动态运行时类型上完成的.所以类似于:

BaseClass* derived2 = new Derived2Class();
task.setInput(derived2);
Run Code Online (Sandbox Code Playgroud)

setInput过载称为BaseClass* 不是 a Derived2Class*.

所以答案取决于你期待的行为,但我猜答案是否定的.