Aufrufen einer Mitgliedsfunktion mithilfe von Funktionszeigern aus der Instanz einer anderen Klasse

#include<iostream>
#include<conio.h>
using namespace std;
class Base;
typedef void (Base::*function)();
class Base
{
public:
    function f;
    Base()
    {
        cout<<"Base Class constructor"<<endl;
    }
    virtual void g()=0;
    virtual void h()=0;
};
class Der:public Base
{
public:
    Der():Base()
    {
        cout<<"Derived Class Constructor"<<endl;
        f=(function)(&Der::g);
    }
    void g()
    {
        cout<<endl;
        cout<<"Function g in Derived class"<<endl;
    }
    void h()
    {
        cout<<"Function h in Derived class"<<endl;
    }
};
class Handler
{
    Base *b;
public:
    Handler(Base *base):b(base)
    {
    }
    void CallFunction()
    {
        cout<<"CallFunction in Handler"<<endl;
        (b->*f)();
    }
};
int main()
{
    Base *b =new Der();
    Handler h(b);
    h.CallFunction();
    getch();
}

Beim Versuch, eine Member-Funktion in einer abgeleiteten Klasse mit dem in der Basisklasse deklarierten Funktionszeiger aufzurufen, wird eine Fehlermeldung angezeigt. Der Funktionszeiger wird als public deklariert und tatsächlich von einem anderen Klassenhandler verwendet. Ich habe in diesem Code eine unsichere Typumwandlung verwendet. (Funktion) (& Der :: g). Gibt es eine Möglichkeit, dies zu vermeiden?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage