The variables are guaranteed to be laid out contiguously, as in C. However, the access blocks may not appear in the object in the order that you declare them.
Access specifier are part of the structure and donot affect the objects created from the structure. All of the access specification information disappears before the program is run; generally this happens during compilation. In a running program, objects become "regions of storage" and nothing more. (Page 270)
In fact, the compiler is the only thing that kowns about the protection level of class members. There is no access control information mangled into the member name that carries through to the linker. All the protection checking is done by the compiler; it has vanished by runtime. (Page 275)