class foo{
public:
int n;
private:
virtual void sayHi(){
cout<<"Hi there!";
}
};
Как получить адрес sayHi() ??Доступ к личной виртуальной функции-члену через указатели
main(){
foo f;
typedef void(*fptr)();
fptr func = reinterpret_cast<fptr>((&f)[0]);
(*func)();
}
Код выше не работает.
Я знаю, что первые 8 байтов объекта «f» являются указателем на виртуальную таблицу, в которой содержатся указатели на функции, я использую 64-разрядную машину. Я в основном пытаюсь вызвать sayHi() через свой указатель, а не называть его непосредственно из f, так как sayHi() является приватным в любом случае! Как мне это сделать? Я распределяю его правильно?
мы говорим о стандартном C++ , или C++ на ваших спецификациях c компилятор, операционная система и архитектура процессора? – immibis
Я использую 64-битную машину. Но это нормально со стандартным C++. Благодаря! –
@Noor Thabit: Er ... Ничего подобного не может быть сделано в «стандартном C++». Стандартный C++ даже не имеет понятия «виртуальная таблица». – AnT