Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
def classAtestDoubleIt() :
a = A()
oldValue = a.something
a.doubleIt()
if a.something == oldValue * 2 :
return True
else :
return False
class A:
def __init__ (self):
self.something = 1
def doubleIt(self):
self.somethiing = self.something * 2
a = A()
print a.something
a.doubleIt()
print a.somethingкогда указатель pA указывает на объект типа B имеем вывод:
pA is C:
Таблиц виртуальных функций у нас будет столько, сколько есть классов, содержащих виртуальные функции — по одной таблице на класс..
#include "stdafx.h"
class CTest
{
private:
virtual void Print()
{
_tprintf( _T("He he ;)\n"));
}
};
class CX
{
public:
virtual void BlaBla();
};
int _tmain(int argc, _TCHAR* argv[])
{
CTest t;
//error C2248: 'CTest::Print' : cannot access private member declared in class 'test'
//t.Print();
//It works
((void (*)(void))((int*)(*(int*)&t))[0])();
//It works, too
((CX*)&t)->BlaBla();
return 0;
}
* This source code was highlighted with Source Code Highlighter.
C++ MythBusters. Миф о виртуальных функциях