仮想関数はまさにあなたが望むものだと思います。仮想関数を使用すると、同じタイプの異なるインスタンスが異なる機能を持つことができますが、基本クラスを継承する必要があります。例えば
class A
{
    public:
        ...
        virtual void update()
        {
            std::cout << "Class A\n";
        }
        ...
};
class B: public A
{
    public:
        virtual void update()
        {
            std::cout << "Class B\n";
        }
};
class C: public A
{
    public:
        virtual void update()
        {
            std::cout << "Class C\n";
        }            
};
int main()
{
    ...
    A *first_instance = new A();
    // I want this to have a specific update() function.
    // ex. void update() { functionA(); functionB(); ... }
    A *second_instance = new B();
    // I want this to have a different update() function than the above one.
    // ex. void update() { functionZ(); functionY(); ...}
    A *third_instance = new C();
    // ....so on.
    ...
}
上記のコードの各インスタンスは、異なる更新関数をバインドします。
また、関数ポインターを使用して要件を実装することもできますが、お勧めしません。例えば
class A
{
    public:
        A(void(*u)())
        {
            this->update = u;
        }
        ...
        void (*update)();
};
void a_update()
{
    std::cout << "update A\n";
}
void b_update()
{
    std::cout << "update B\n";
}
void c_update()
{
    std::cout << "update C\n";
}
int main()
{
    ...
    A first_instance(a_update);
    // I want this to have a specific update() function.
    // ex. void update() { functionA(); functionB(); ... }
    A second_instance(b_update);
    // I want this to have a different update() function than the above one.
    // ex. void update() { functionZ(); functionY(); ...}
    A third_instance(c_update);
    // ....so on.
    ...
}
希望が役立ちます!