class derived: public base {
int j;
public:
// Класс derived использует параметр x, а параметр у передается конструктору класса base.
derived(int x, int y): base(y){
j = x;
cout << "Создание derived-объекта.\n";
}
~derived() { cout << "Разрушение derived-объекта.\n"; }
void show() { cout << i << " " << j << "\n"; }
};
int main()
{
derived ob(3, 4);
ob.show(); // отображает числа 4 3
return 0;
}
Здесь конструктор класса
Рассмотрим пример программы, в которой демонстрируется наследование нескольких базовых классов.
#include
using namespace std;
class base1 {
protected:
int i;
public:
base1(int x) {
i = x;
cout << "Создание base1-объекта.\n";
}
~base1() { cout << "Разрушение base1-объекта.\n"; }
};
class base2 {
protected:
int k;
public:
base2(int x) {
k = x;
cout << "Создание basе2-объекта.\n";
}
~base2() { cout << "Разрушение basе2-объекта.\n"; }
};
class derived: public base1, public base2 {
int j;
public:
derived(int x, int y, int z): base1(y), base2(z){
j = x;
cout << "Создание derived-объекта.\n";
}
~derived() { cout << "Разрушение derived-объекта.\n"; }
void show() { cout << i << " "<< j << " "<< k << " \ n"; }
};
int main()
{
derived ob(3, 4, 5);
ob.show(); // отображает числа 4 3 5
return 0;
}
Важно понимать, что аргументы для конструктора базового класса передаются через аргументы, принимаемые конструктором производного класса. Поэтому, даже если конструктор производного класса не использует никаких аргументов, он, тем не менее, должен объявить один или несколько аргументов, если базовый класс принимает один или несколько аргументов. В этой ситуации аргументы, передаваемые производному классу, "транзитом" передаются базовому. Например, в следующей программе конструкторы
#include
using namespace std;
class base1 {
protected:
int i;
public:
base1(int x) {
i=x;
cout << "Создание base1-объекта.\n";
}
~base1() { cout << "Разрушение base1-объекта.\n"; }
};
class base2 {
protected:
int k;
public:
base2(int x) {
k = x;
cout << "Создание basе2-объекта.\n";
}
~base2() { cout << "Разрушение basе2-объекта.\n"; }
};
class derived: public base1, public base2 {
public:
/* Конструктор класса derived не использует параметров, но должен объявить их, чтобы передать конструкторам базовых классов.
*/
derived(int х, int у): base1(х), base2(у){
cout << "Создание derived-объекта.\n";
}
~derived() { cout << "Разрушение derived-объекта.\n"; }
void show() { cout << i << " " << k << "\n"; }
};
int main()
{
derived ob(3, 4);
ob.show(); // отображает числа 3 4
return 0;
}