class foo{
public:
int n;
private:
virtual void sayHi(){
cout<<"Hi there!";
}
};
Wie bekomme ich die Adresse von sayHi() ??Zugriff auf eine private virtuelle Member-Funktion über Zeiger
main(){
foo f;
typedef void(*fptr)();
fptr func = reinterpret_cast<fptr>((&f)[0]);
(*func)();
}
Der obige Code hat nicht funktioniert.
Ich weiß, dass die ersten 8 Bytes von "f" -Objekt ist ein Zeiger auf eine virtuelle Tabelle, wo es die Zeiger auf die Funktionen enthält, verwende ich 64-Bit-Maschine. Ich versuche im Prinzip den sayHi() durch seinen Zeiger aufzurufen, anstatt ihn direkt von f aus aufzurufen, da sayHi() sowieso privat ist! Wie würde ich das tun? Teile ich es richtig auf ??
Sprechen wir über Standard-C++ oder C++ auf Ihrem spezifischen c Compiler, Betriebssystem und Prozessorarchitektur? – immibis
Ich benutze 64-Bit-Maschine. Aber es ist in Ordnung mit dem Standard-C++. Vielen Dank! –
@Noor Thabit: Äh ... Nichts kann in "Standard C++" getan werden. Standard C++ hat nicht einmal ein Konzept der "virtuellen Tabelle". – AnT