Выполняет ли перегрузка функций с помощью объекта polyorph в C++. Я хочу достичь поведения, подобного приведенному ниже коду.динамический полиморфизм в 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);
}
Это зависит от того, что вы подразумеваете под «работой», что перегрузка вы ожидаете 'task.setInput (производный2)' для вызова? –
Вы имеете в виду многократную отправку? (Это означает, что полиморфизм основан на всех аргументах, а не только на этом.) –
Я думаю, вы хотите, чтобы 'task.setInput (производный2)' вызывал перегруз с аргументом Derived2Class *, который здесь ** не является ** здесь. Полиморфизм в C++ работает только для ** субъекта ** (то есть объекта, на который вызывается функция), а не для аргументов. Как упоминает @ TheodorosChatzigiannakis, для этого требуется метод, известный как «множественная отправка», большинство языков ООП (например, C++, а также Java для другого примера) не поддерживают из коробки, но могут быть «эмулированы» с использованием шаблона проектирования Visitor. См. Https://en.wikipedia.org/wiki/Multiple_dispatch – leemes