在实现继承中,是否连续分配了来自多个层的数据成员? 我想知道C++中的多个继承级别中的类数据成员是否被连续分配。例如,如果我有以下课程: class Base { public: int a; }; class child_1 : public Base { public: int b; }; class child_2 : public child_1 { public: int c; }

在实现继承中,是否连续分配了来自多个层的数据成员? 我想知道C++中的多个继承级别中的类数据成员是否被连续分配。例如,如果我有以下课程: class Base { public: int a; }; class child_1 : public Base { public: int b; }; class child_2 : public child_1 { public: int c; },c++,inheritance,casting,C++,Inheritance,Casting,以下操作是否会运行并输出所有编译器上所需的内容 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: " << *(

以下操作是否会运行并输出所有编译器上所需的内容

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;
请注意,我不是在问这是否是个好主意。显然,您希望设计您的软件,这样您就不会做这样的事情,但我正在考虑这样一种方法来解决使用一些旧代码(由经验丰富的软件工程师编写,这会使问题变得更复杂)的问题


我专门使用的编译器是VC++2005。

否,未指定派生类成员和基类成员的相对布局

在当前标准中,类只有在满足以下条件时才是标准布局:

在最派生的类中没有非静态数据成员,并且最多有一个基类具有非静态数据成员,或者没有基类具有非静态数据成员

在较旧的标准中(适用于您的编译器),甚至没有标准布局的概念,只有POD,任何具有非空基类的类都不是POD


您的代码取决于特定编译器如何布局基类,并且是不可移植的。

如果您引入了
virtual
函数,则会中断;如果您引入了另一个数据成员,则会中断。。。坦率地说,封装是有目的的。如果确实需要迭代,请使用函数创建一个
int*
数组,该数组按您希望的顺序引用各个字段。
int* int_ptr (int*)&my_obj;