If you put a number in x.foo
x.bar will give you the char corresponding to the number resulting from taking the first byte(generally) of the int.
&&
If you change x.bar
x.foo also changes.
It can't. Not entirely. The int and the char occupy the same memory, but as the int is larger than the char (takes more memory), the char will only represent some part of the integer's representation in memory, as manasij said.
Do note that a union can still have member functions, do inheritance and polymorphism, overload operators, etc. It's just exactly the same as a struct, but where the data members use the same memory. ;)
Yeah, sorry - I wasn't on top form earlier... I meant to say "It won't allow member functions of a nameless union. Virtual or not". I was typing fast earlier :X You are right of course :)