A
вообще не имеет vtable (или не должно быть на любом хорошем компиляторе), потому что это не полиморфный класс: у него нет виртуальных функций-членов.
Функция show()
существует в исполняемом файле ровно один раз. Функции-члены на самом деле не отличаются от обычных функций, не являющихся членами, они просто имеют дополнительный неявный параметр this
. Вы можете думать об этом, как будто компилятор преобразует функцию-член в похожую функцию, не являющуюся членом, например:
void show(A* this)
{
if (this->x == 0)
cout << "\nCalled by OBJ_1";
else
cout << "\nCalled by OBJ_2";
}
Вместо OBJ_1.show()
аналогичным способом вызова этой функции, не являющейся членом, будет использование show(&OBJ_1)
.
Не существует ни одного A::show()
на A
созданного объекта. Всего один A::show()
, и он принимает в качестве аргумента экземпляр, по которому он был вызван.