Бьярне Страуструп пишет:Virtual Наследование - база совместно с другими производными классами
При определении функций для класса с виртуальной базой, программист вообще не может знать, будет ли база будет использоваться совместно с другими производными классами , Это может быть проблемой при реализации службы, которая требует, чтобы функция базового класса вызывалась ровно один раз.
Я не понимаю этого утверждения. Какие возможные проблемы могут возникнуть?
Чтобы объяснить это, он дает странный пример
class A { // no constructor
// ...
};
class B {
public:
B(); // default constructor
// ...
};
class C {
public:
C(int); // no default constructor
};
class D: virtual public A, virtual public B, virtual public C
{
D() { /*... */ } // error: no default constructor for C
D(int i) : C(i i) { /*... */ }; // ok
// ...
};
Имеет ли значение здесь ??
: пожалуйста, объясните эту строку в приведенном выше описании «программист вообще не может знать, будет ли база разделяться с другими производными классами». эта строка убивает меня. К чему он ссылается? –
вы можете указать другой пример (кроме конструктора), где функцию базового класса нужно вызывать только один раз –