@communistic_sistema
Биохимик, но в программировании немного шарю

Как получить указатель на функцию класса?

Я посмотрел вопрос о получении и исполнении функции класса по указателю.
Я не понимаю, как это будет работать с классами-наследниками и виртуальной функцией.

struct obj1 {
  virtual void execute() = 0;
}
struct obj2 : obj1 {
 void execute(){}
}
struct obj3 : obj2 {
 void execute(){}
}
int main(){
  obj1* obj = new obj3();
  void (obj1::*func)() = obj1::execute;
  (obj1->*func)();
}

Что будет? Можно ли вообще так делать, если нет, то какие альтернативы для этого есть?
  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Что будет?

В данном примере -- то же самое, как если просто написать obj->execute(), т.е. виртуальный вызов конечного переопределения для функции obj1::execute в объекте класса obj3. См. eelis.net/c++draft/expr.call#3

Я не понимаю как это будет работать с классами наследниками и виртуальной функцией.

Если почитать соответствующую главу стандарта, то можно заметить, что виртуальные функции там вообще не обсуждаются. Всё специфичное для виртуальных функций поведение определено в разделе о вызове функций и не зависит от того, как именно вызываемая функция указана -- явно или через указатель на функцию класса.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы