блог-форум о программировании

Вы не вошли.


Deprecated: Function create_function() is deprecated in /home/user2058794/www/majestio.info/include/class/geshi.php on line 4698

#1 2017-11-20 15:57:15

Majestio
Администратор
Здесь с 2017-11-17
Сообщений: 73
Windows 10Firefox 57.0

C++ = Hack VMT - вызов приватного метода предка


C++ = Hack VMT - вызов приватного метода предка



Небольшие эксперименты показали - а почему бы и нет  :)

#include <iostream>
 
// -----------------------------------------
 
class Base {
  public:
   virtual ~Base(){}
  private:
    virtual void ShowBase() {
      std::cout << "BaseShow" << std::endl;
    }
};
 
// -----------------------------------------
 
class Derived: public Base {
  public:
    virtual void ShowDerived() {
      std::cout << "DerivedShow" << std::endl;
    }
};
 
// -----------------------------------------
 
#ifdef _MSC_VER
  #define IDX 1
#else
  #define IDX 2
#endif  
 
int main() {
  Derived *D = new Derived();
  (*(void(*)(void*))((void**)(*(void**)D))[IDX])(D);  
  delete D;
  return 0;
}

При использовании M$ VC++ VMT строится по-иному.

Вне форума

Сейчас в этой теме пользователей: 0, гостей: 1
[Bot] CCBot

Подвал форума

Под управлением FluxBB
Модифицировал Visman

[ Сгенерировано за 0.046 сек, 7 запросов выполнено - Использовано памяти: 2.17 Мбайт (Пик: 2.71 Мбайт) ]