Конструктор производного копирования не будет вызывать конструктор копирования базового класса по умолчанию.Если вы не скажете конструктору копирования производного класса вызвать конструктор копирования базового класса, ему все равно потребуется создать базовый подобъект, поэтому ему придется вызывать конструктор базового по умолчанию.
Но вВ приведенном ниже примере вы увидите, что вы можете добавить вызов к конструктору базовой копии в списке инициализации члена явно производного класса:
class base {
public:
base(int i):m_i(i){
cout << "base constructor" << endl;
}
base(const base& rh) {
m_i = rh.m_i;
cout << "base copy constructor" << endl;
}
private:
int m_i;
};
//case 2:
class der : public base {
public:
der(int i,int j):base(i),m_j(j){
cout << "der constructor" << endl;
}
der(const der& rh):base(rh) {
m_j = rh.m_j;
cout << "der copy constructor" << endl;
}
private:
int m_j;
};
int main() {
der d(1,2);
der d1(d); //d1.m_i = 1, d1.m_j = 2
}
//result
//base copy constructor
//der copy constructor