Когда механизм наследования осуществляется от нескольких классов, то это множественное наследование. При множественном наследовании производный класс может включать произвольное количество базовых классов. Форма множественного наследования выглядит так:
class <имя производного класса>:
<вид наследования> <имя базового класса>
<вид наследования> <имя базового класса>
...
{...};

Вид наследования определяет режим доступа к компонентам каждого из базовых классов. Базовые классы создаются в том порядке, в котором они перечислены в списке базовых классов при объявлении производного класса. Если конструкторы базовых классов не имеют аргументов, то производный класс может не иметь конструктора. При наличии у конструктора базового класса одного или нескольких аргументов, каждый производный класс должен иметь конструктор. Чтобы передать аргумент в базовый класс, нужно определить их после объявления конструктора производного класса.
<имя конструктора производного класса> (<список аргументов>),
<имя конструктора базового класса 1> (<список аргументов>),
...
{<тело конструктора производного класса>}

Список аргументов, ассоциированных с базовым классом может состоять из констант, глобальных параметров и/или параметров для конструктора производного класса. Последовательность активации конструктора такая же, как и для случая одиночного наследования:
- активируются конструкторы для базовых классов (в порядке их перечисления в объявлении производного класса)
- затем активируется конструктор класса.
Пример 1
Class X------->

->Class Z
Class Y------->

class X
{
protected:

int  x;

public:
x(int i); /* конструктор с параметром */
~x(void); /* деструктор */
void put_x(int i) {x=i;}
int get_x(void) {return x;}
void show(void);
};

class Y
{
protected:

int  y;

public:
Y(int i); /* конструктор с параметром */
~Y(void); /* деструктор */
void put_y(int i) {y=i;}
int get_y(void) {return y;}
void show(void)
};

class Z: public X, public Y
{
protected;

int z;
public:
z(int i, int j); /* конструктор с параметром*/
~z(void); /* деструктор */
void make_z(void);
void show(void);
};

x::x(int i)
{

x=i;

cout<<” конструктор X \n”;
}
x::~x(void){ cout<<” деструктор X \n”;}
void x::show(void) { cout<<” X=”<<x<<endl;}

y::y(int i)
{

y=j;
cout<<” конструктор Y \n”;
}
y::~y(void){ cout<<” деструктор Y \n”;}
void y::show(void){ cout<<” Y=”<<y<<endl;}

/* конструктор класса Z передает значение своих параметров */
z::z(int i, in j):Y(j), X(i) { cout<<” конструктор Z \n”;}
z::~x(void){ cout<<” деструктор Z \n”;}
void Z::make_z(void){ z=x*y;}
void Z::show(void){ cout<<z<<” =”<<x<<”*”<<y<<endl;}

main(void)
{
z zobj(3, 5); /* создание и инициализация объекта*/
zobj.make_z();
zobj.show();
zobj.x::show();
zobj.y::show(); /* осуществление вызова функции из разных классов*/
zobj.put_x(7);/* задание новых значений переменных */
zobj.put_x(9);
zobj.make_z();
zobj.show();
zobj.x::show();
zobj.y::show();
return 0;
}