一个继承自c ++中两个类的类

sie*_*ema 0 c++ oop inheritance abstract-class multiple-inheritance

假设我有一个酒类,它有两个派生类:葡萄酒啤酒.如果我将制作一个继承了WineBeer的类Cider,会发生什么?

Cider类中会出现多少份酒精

我知道它可以通过虚拟继承来完成而没有它,但会有什么区别?

Ker*_* SB 13

非虚拟继承:

struct Beer : Alcohol {};
struct Wine : Alcohol {};           // I'll have what he's having!
Run Code Online (Sandbox Code Playgroud)
Alcohol   Alcohol                   // ...whe-ere'sh my... bayshe clashhh... hic
   ^         ^
   |         |
 Beer       Wine
    ^       ^
     \     /
      \   /
      Cider
Run Code Online (Sandbox Code Playgroud)

虚拟继承:

struct Beer : virtual Alcohol {};   // virtual = doesn't get you drunk
struct Wine : virtual Alcohol {};
Run Code Online (Sandbox Code Playgroud)
     Alcohol                        // you can see clearly now
     ^     ^
    /       \
 Beer       Wine
    ^       ^
     \     /
      \   /
      Cider
Run Code Online (Sandbox Code Playgroud)

在非虚拟情况下,有两个不同的基础子对象.让我们来看看他们:

Cider x;
Alcohol & a1 = static_cast<Beer&>(x);
Alcohol & a2 = static_cast<Wine&>(x);

assert(std::addressof(a1) != std::addressof(a2));
Run Code Online (Sandbox Code Playgroud)

  • upvoting只为喜剧图评论!:) (2认同)
  • @KerrekSB酷,那回答刘海.现在正在煽动另一个分裂;-) ......(酗酒者pfffft ...) (2认同)