Класс может быть производным по отношению к любому числу базовыхклассов. Приведем пример: class A { /*... */ }; class B { /*... */ }; class C { /*... */ }; class D: public A, public B, public C { /*... */ }; Использование более, чем одного прямого базового класса называетсямножественным наследованием. Порядок наследования не важен, если не учитывать вопросов,связанных со стандартной инициализацией с помощью конструктора($$R.12.1), уничтожением ($$R.12.4) и размещением в памяти($$r.5.4, $$R.9.2, $$R.11.1). Порядок выделения памяти для базовыхклассов определяется реализацией. Нельзя указывать класс в качестве прямого базового по отношениюк производному классу более одного раза, но косвенным базовым классомон может быть неоднократно. class B { /*... */ }; class D: public B, public B { /*... */ }; // недопустимо class L { /*... */ }; class A: public L { /*... */ }; class B: public L { /*... */ }; class C: public A, public B { /*... */ }; // нормально Здесь объект класса C будет иметь два вложенных объекта класса L. К спецификации базового класса можно добавить служебное словоvirtual. Отдельный объект виртуального базового класса V разделяетсямежду всеми базовыми классами, которые указали V при задании своихбазовых классов. Приведем пример: class V { /*... */ }; class A: virtual public V { /*... */ }; class B: virtual public V { /*... */ }; class C: public A, public B { /*... */ }; Здесь объект класса C будет иметь только один вложенный объекткласса V. Класс может содержать виртуальные и невиртуальные базовые классы одноготипа, например: class B { /*... */ }; class X: virtual public B { /*... */ }; class Y: virtual public B { /*... */ }; class Z: public B { /*... */ }; class AA: public X, public Y, public Z { /*... */ }; Здесь объект класса AA будет иметь два вложенных объекта класса B:из класса Z и виртуальный, разделяемый между классами X и Y.