继承
例一:(与之后的vitual继承结果相对比;)


若将class D中的虚的fun()函数去掉虚的关键字;其最后的结果仍为下面的截图;
对于将其改成 class D:public B,public C ,其结果仍然为如下所示:
得到的结果:截图如下:

例二:
若只将class D的类改为:没有虚的fun()函数;

结果:对于pd->fun() //则编译不通过;因为:
![]()
其他的结果截图如下:

例三:
在例二的基础上,D类中没有void fun()函数;若将class B的类改为:没有void fun()函数;
结果:

例四:
将class D类改为如下所示:


此时对于pd->fun()则能通过;
结果:

对于pa2->fun()调用的是B中的 //!!!!!
//继承对于调用函数来说,有影响的不是是否为虚继承,而是对于每个类中的函数是否为虚函数;(虚函数则会有虚函数指针)


结果如下:

若将每个类中的fun()函数改为虚函数;(在函数前加关键字virtual)其结果为:

若将D类中的fun函数去掉,则结果:(编译不通过)此时对于D来说其既继承了B还继承了C,会使其不知调用哪一个fun()函数,则编译器不允许通过;

若将B类中的fun()函数去掉,则编译通过
结果:

若将C类中的fun()函数去掉,则编译通过;
结果:

若将B类和C类中的fun()都去掉,则编译通过;
结果:

浙公网安备 33010602011771号