[Basic C++] #8_파생 클래스와 베이스 클래스의 연동, 생성 순서, 생성자 체이닝, 캐스팅
C++ 개발에서 상속을 통해 기본 클래스와 파생 클래스의 연동, 생성 순서 등에 대해 알아보겠습니다.
"전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다.
C++의 객체 생성 순서
C++의 객체 생성 순서는 재귀적으로 적용됩니다.
1. 베이스 클래스의 디폴트 생성자 호출
2. 클래스 데이터 멤버들의 선언 순서에 맞춰 생성
3. 생성자 바디 실행
class someClass
{
public:
someClass() { cout << "2"; ]
};
class parentClass
{
public:
parentClass(){ cout << "1"; }
};
class childClass
{
public:
childClass(){ cout << "3"; }
private:
someClass member1;
};
int main()
{
childClass child; // childClass 객체 생성
return 0;
}
두 계층 이상의 상속 관계를 형성하는 객체들의 생성 순서를 알아봅니다.
childClass 객체 생성 시, 가장 먼저 parentClass 즉 childClass가 상속하는 부모 클래스의 생성자가 호출됩니다. - "1"
다음으로, childClass 객체 내부의 someClass 객체가 초기화 되며, someClass의 생성자가 호출됩니다. - "2"
마지막으로, childClass 객체의 생성자 바디가 실행됩니다. - "3"
* 주의: 생성자 내부에 작성된 가상 멤버 함수는 동작 방식이 상이합니다. 슈퍼 클래스의 가상 멤버 함수를 서브 클래스에서 오버라이딩 했음에도 불구하고, 슈펴 클래스의 생성자 내부에서 호출되는 해당 가상 멤버 함수는 슈퍼 클래스의 정의를 따릅니다.
'언어 > Basic C++' 카테고리의 다른 글
[Basic C++] #10 오버라이드 키워드, override (0) | 2022.03.17 |
---|---|
[Basic C++] #9 객체의 업캐스팅과 다운캐스팅, 슬라이싱 (0) | 2022.03.16 |
[Basic C++] #7 클래스 상속 활용 방법 (0) | 2022.03.10 |
[Basic C++] #6_오버라이딩과 오버로딩의 차이점 (0) | 2022.03.07 |
[Basic C++] #5 메서드 종류, static 메서드, const 메서드 (0) | 2022.03.07 |