D12(int p11,int p12,int p13,int p21,int p22,int p23,int p):D1(p11,p12,p13),D2(p21,p22,p23)
这里D12这个派生类已经调用了基类D1,D2的构造函数,这样D1的构造函数会设置p3并调用P的构造函数设置p1,p2,但是同样D2的构造函数也会调用P的构造函数来设置p1,p2。
所以实际上,d这个对像存在两个p对象,其中一个是d1的,另一个是d2的,但是由于你的display方法是调用的d2的display,而d2的display只会显示d2的p中的p1,p2的值。因此就是4,5.
如果你在D12::display当中再添加 D1::display则显示结果如下:
D2::display()
pri1=4,pri2=5
pri4=6
D1::display()
pri1=1,pri2=2
pri3=3
pri12=7
D2::display()
pri1=12,pri2=9
pri4=7
D1::display()
pri1=1,pri2=2
pri3=3
pri12=8