虚继承抽象类会咋样
首先先说,我不是那种懒人,我已经用VS试验过了,不过刚突发奇想觉得很有意思,所以想跟大家分享下。
菱形虚继承(远征篇-继承-6.1),最底层实例化时只有一个最高层的副本,比如B和C继承A,D继承B和C,那么实例化D的时候只会实例化一个A的对象。
这节课有一个知识点叫抽象类(含有纯虚函数的类),这就很有意思了,抽象类无法实例化,必须定义继承下来的虚函数才能实例化,那么假设B和C对同一个A中的虚函数fun有不同的实现,那么D同时继承B和C,D又只含有一个A的副本,那么D中的fun到底是B中定义,还是C中定义的呢?
答案是无法编译(虚拟函数 函数 "A::fun" 的重写不明确),只有B和C中有且只有一个fun函数的定义,才可以编译通过,顺利运行。