Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Размер класса при виртуальном наследовании


Автор: xTr1m 5.2.2013, 14:04
Доброго времени суток. Разбираюсь с данным вопросом, вот при такой схеме наследования размер класса C = 12
Код

class A
{
};

class B1 : virtual public A
{ 
};

class B2 : virtual public A
{
};
class C : public B1, public B2
{
    int y;    
};

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int size = sizeof(C);
}

как я понимаю, тут 4 байта от "int y" и два указателя на таблицы вирутальных классов B1 и B2 (поправьте меня, если это не так)
а вот при такой схеме
Код

class A
{
};

class B1 : public A
{ 
};

class B2 : public A
{
};
class C : public B1, public B2
{
    int y;    
};

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int size = sizeof(C);
}

размер равен 8. откуда берутся 4 байта? Указатель на некую таблицу, но на какую тогда? Заранее благодарен.

Автор: xTr1m 5.2.2013, 15:36
Что-то я совсем запутался
Код

class A
{
};
class B1 : virtual public A
{ 
};
class B2 : virtual public A
{
};
class C : public B1, public B2
{ 
};
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int size = sizeof(C);
}

теперь размер = 4. Получается, что таблица виртуальных классов одна?

P.S. хотя нет. это я уже горячку напорол. Все-таки 8. Значит таблицы две =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)