Вы, вероятно, не хотите динамически менять функцию во время выполнения. Если вы это сделаете, один из других ответов покажет вам, как использовать функторы. Но для меня это звучит так, будто вы хотите, чтобы разные объекты имели разную функциональность в зависимости от некоторого свойства объекта.
Для чего предназначены виртуальные функции:
Вы определяете действие в базовом классе. Затем в производном классе вы предоставляете фактическую реализацию, основанную на том, как объект должен действовать.
class MyClass
{
public:
virtual void onShow() = 0;
};
class Window: public MyClass
{
public:
virtual void onShow() { /* Draw Window */ }
};
void aboutToShowObject(MyClass& obj)
{
obj.onShow();
}