Мне интересно, или члены класса данных из нескольких уровней наследования расположены последовательно в компиляторах C ++.Например, если у меня есть следующие классы:
class Base
{
public:
int a;
};
class child_1 : public Base
{
public:
int b;
};
class child_2 : public child_1
{
public:
int c;
}
Будет ли следующая операция выполняться и выводить то, что ожидается на всех компиляторах?
child_2 my_obj;
my_obj.a = 3; my_obj.b = 2; my_obj.c = 1;
Base* base_ptr = (Base*)&my_obj;
int* int_ptr = (int*)base_ptr;
cout << "Output 3: " << *int_ptr << endl
<< "Output 2: " << *(int_ptr + 1) << endl;
<< "Output 1: " << *(int_ptr + 2) << endl;
Кроме того, если это возможно, могу ли яВам нужно промежуточное приведение от типа child_2 * к типу Base *, как я описал выше, или допустимо ли следующее:
int* int_ptr (int*)&my_obj;
Обратите внимание, что я не спрашиваю, является ли это хорошей идеей.Очевидно, что вы захотите спроектировать свое программное обеспечение так, чтобы в конечном итоге вы не делали подобные вещи, но я рассматриваю такой подход, чтобы решить проблему с работой со старым кодом (разработанным опытным инженером-программистом, что делает егоболее сложный).
Компилятор, с которым я специально работаю, это VC ++ 2005.