C++ pointer multi-inheritance fun

c++, multiple-inheritance

Solution

- does pa point to a valid A object?

- does pb point to a valid B object?

Yes, the `C*` gets converted so that `pa` and `pb` point to the correct addresses.

- does pa == pb ?

No, usually not. There can't be an `A` object and a `B` object at the same address.

Furthermore, does

- pc == (C*) pa ?

- pc == (C*) pb ?

The cast converts the pointers back to the address of the `C` object, so both equalities are true.

Problem

I'm writing some code involving inheritance from a basic ref-counting pointer class; and some intricacies of C++ popped up. I've reduced it as follows: Suppose I have: ``` class A{}; class B{}; class C: public A, public B {}; C c; C* pc = &c; B* pb = &c; A* pa = &c; // does pa point to a valid A object? // does pb point to a valid B object? // does pa == pb ? ``` Furthermore, does: ``` // pc == (C*) pa ? // pc == (C*) pb ? ``` Thanks!

Original source