Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Выравнивание и наследование

4 views
Skip to first unread message

Soldatenkov Mitea

unread,
Apr 13, 2010, 5:47:16 AM4/13/10
to
Hi all!
����:
class Class1
{
public:
int X;
char C;
};
class Class2:public Class1
{
public:
char Q;
};
������������ - ��� ��� ����������� ������� � ������ �������� ���� ��� ��
��-������, ������ Class1 ��� �������� �� ������ �����, ��-������, ������
Class2 ��� ����� ������ ������? �� ����, ��� �� ����� � ����� Class1 �� ������
��������������� ����� ��� ������������, �� � �������������� ���������.
2008 ������, ��
class Class1
{
public:
int X;
char C;
};
class Class2:public Class1
{
public:
char Q;
};
cout<<sizeof(Class2);
��� 32 �������� ���� ������ 12 ����.

Serguei E. Leontiev

unread,
Apr 19, 2010, 7:36:08 PM4/19/10
to
Здравствуй Soldatenkov,

Soldatenkov Mitea -> All @ вт 13-апр-10 13:47 MSD:

SM> class Class1
SM> {
SM> public:
SM> int X;
SM> char C;
SM> };
SM> class Class2:public Class1
SM> {
SM> public:
SM> char Q;
SM> };
SM> Спрашивается - как при минимальных плясках с бубном добиться того что бы
SM> во-первых, размер Class1 был выровнен на четыре байта, во-вторых, размер
SM> Class2 был равен восьми байтам? То есть, что бы место в конце Class1 не просто
SM> резервировалось место под выравнивание, но и использовалось потомками.

Что-то ты хочешь странного, т.е. для
Class2 c2;
Class1 *pc1 = &c2;

sizeof(*pc1) == sizeof(c2) == 8

Что, на мой взгляд, противоречит п. 3.9 Types стандарта C++03, который
описывает следующие операции как допустимые:

char buf[sizeof(*pc1)];

memcpy(buf, pc1, sizeof(*pc1));
memcpy(pc1, buf, sizeof(*pc1));

Class1 c1;

memcpy(pc1, &c1, sizeof(*pc1));

--
Успехов, Сергей Леонтьев. E-mail: l...@CryptoPro.ru <http://www.cryptopro.ru>

0 new messages