继承

例一:(与之后的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()都去掉,则编译通过;

结果:

 继承

你可能感兴趣的:(继承)