파생 클래스에는 기본 클래스가 포함되어 있으므로 파생 클래스를 만들 때 시스템은 먼저 기본 클래스를 만듭니다. 파생 클래스는 기본 클래스의 모든 멤버를 흡수하지만 나중에 언급되는 생성자와 소멸자를 포함하지 않는다는 점에 유의해야 합니다. 즉, 파생 클래스를 만들 때 자체 생성자를 호출하기 전에 먼저 기본 클래스를 호출합니다. . 생성자 .
여기서는 코드를 통해 이를 확인할 수 있습니다.
#include<iostream>usingnamespacestd;classClock{private:intH;intM;intS;public:Clock(){cout<<Clock'sConstructorCalled!<<endl;}};classAlarmClock:publicClock{private:intAH;intAM;public:AlarmClock (){cout<<AlarmClock'sConstructorCalled!<<endl;}};intmain(){AlarmClockA;return0;}실행 스크린샷은 다음과 같습니다.

파생 클래스 객체가 하나만 정의되어 있고 파생 클래스의 생성자와 기본 클래스가 자동으로 호출되는 것을 볼 수 있습니다. 호출 순서는 기본 클래스의 생성자를 먼저 호출한 다음 파생 클래스의 생성자를 호출하는 것입니다.
위에서 본 것은 가장 일반적이고 간단한 호출 방법입니다. 이는 암시적일 뿐입니다. 즉, 직접 작성하지 않고 자동으로 호출됩니다. 그러면 기본 클래스의 생성자가 매개변수를 취할 때 이를 어떻게 호출합니까? 괜찮나요? 매개변수를 전달하는 방법은 무엇입니까?
답변: 그런 다음 컴파일러에게 명시적으로 알려야 합니다. 즉, 명확하게 작성하고 전달할 매개변수를 지정해야 합니다.
일반적인 쓰기 형식은 다음과 같습니다.
파생 클래스 생성자 이름(전체 매개변수 목록 열): 기본 클래스 생성자(실제 매개변수 목록 열)
예를 들어 코드는 다음과 같습니다.
#include<iostream>usingnamespacestd;classClock{private:intH;intM;intS;public:Clock(){cout<<Clock'sConstructorCalled!<<endl;}Clock(inth,intm,ints){this->H=h ;this->M=m;this->S=s;cout<<Clock'sConstructorwithparameterCalled!<<endl;}};classAlarmClock:publicClock{private:intAH;intAM;public:AlarmClock(){cout<<AlarmClock' sConstructorCalled!<<endl;}AlarmClock(inth,intm,ints):Clock(h,m,s){cout<<AlarmClock'sConstructorwithparameterCalled!<<endl;}};intmain(){AlarmClockA(8,10,30 );AlarmClockB;return0;}나중에 파생 클래스의 생성자에 콜론과 기본 클래스의 매개변수가 전달되고 기본 클래스의 매개변수는 명시적 매개변수 호출을 구현하는 실제 매개변수입니다. 컴퓨터로 연습해주세요!
기본 클래스에 매개변수가 있는 생성자가 있으면 기본 클래스에서 매개변수 전송을 실현하고 초기화 작업을 완료하기 위해 파생 클래스를 전달하는 명시적 매개 변수가 있는 파생 클래스 생성자가 있어야 합니다.