c ++中虚拟和简单继承的区别

MGE*_*MGE 1 c++ virtual inheritance

有什么区别

Class A {};
Class Z: public A {};
Run Code Online (Sandbox Code Playgroud)

Class A {};
Class Z: virtual public A{};
Run Code Online (Sandbox Code Playgroud)

das*_*ght 8

假设没有额外的继承层次结构,在这种情况下没有区别.查看差异的唯一方法是通过多种方式继承同一个类 - 例如,如下所示:

class ZA : public Z, public A {};
Run Code Online (Sandbox Code Playgroud)

class ZA : virtual public Z, virtual public A {};
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,ZA将有两个区域具有单独的As - 一个直接继承,一个继承通过Z.在第二种情况下,只有一个A,通过两个路径继承,并共享.

这是一个例子:

虚拟与常规继承

  • 好的......所以...有什么区别? (2认同)