В общем случае алмаза:множественное наследование - виртуальный модификатор
class MBase {
public:
MBase(int) {}
virtual char const* vf() const = 0;
virtual ~MBase() {}
};
class D1 : public MBase { //NOT VIRTUAL!!!
public:
D1() : MBase(1) {}
char const* vf() const { return "D1"; }
};
class D2 : virtual public MBase {
public:
D2() : MBase(2) {}
char const* vf() const { return "D2"; }
};
class Bottom : public D1, public D2 {
public:
char const* vf() const { return "Bottom"; }
}
Что изменится, если я изменил модификатор наследования Bottom быть виртуальным и для D1 и D2? Я имею в виду, что это повлияет:
class Bottom : public virtual D1, public virtual D2 {
public:
char const* vf() const { return "Bottom"; }
}
ОК, так что я думаю, если бы у меня была пара Bottoms, все унаследовали практически от D1 и D2, тогда у листа будет только одна копия D1 и D2 во всех них ... Большое спасибо за отличный ответ! – Bober02