Pages

Friday, July 24, 2009

C++ классы: размещение в памяти. Часть V.

Можна и подменить:

#include <stdio.h>
#include <memory>

class CBase
{
public:
virtual void test()
{
printf("CBase::test()\r\n");
}
};

class CVirtTest
{
public:
virtual void test()
{
printf("CVirtTest::test()\r\n");
}
};

typedef void (* func)();
typedef struct
{
func Entry;
} FUNC_TABLE;

void Trick()
{
printf("Trick()\r\n");
}

int main()
{
CVirtTest test;
CBase* pBase = (CBase*)&test;

FUNC_TABLE funcTable = { Trick };
FUNC_TABLE* pFuncTable = &funcTable;
memcpy(&test, &pFuncTable, sizeof(long));

pBase->test();
return 0;
}



Для проверки можно закоментировать строку:
//memcpy(&test, &pFuncTable, sizeof(long));
получается:

Работает!

No comments:

Post a Comment