don't know why cout << pd1, and cout << pd2 are different, they are assigned the same value &s.
It is surprise of Multiple Inheritance. CSon consist of 2 blocks: CDerive2 block and CDerive1 block, each of them has own address. [CDerive2][CDerive1] or [ C S o n ] Therefore address of CSon instance is equal to address of CDerive2 part of CSon, but is not equal to address of CDerive1 part of CSon.
With best wishes, Vita