일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 패스트캠퍼스
- albert
- 직장인인강
- 한번에끝내는Java/Spring웹개발마스터초격차패키지
- R
- AI
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.
- 알버트
- 패스트캠퍼스후기
- SKT
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지
- 패캠챌린지
- 직장인자기계발
- Today
- Total
제주 탈출 일지
파생 클래스 본문
상속(inheritance)
상속은 사용자에게 코드의 재활용성 및 클래스 간의 계층적 관계를 제공하여 객체 지향 프로그래밍을 가능하게 한다.
상속한 클래스를 부모 클래스, 기초 클래스, 상위 클래스라고 하며 상속받은 클래스를 파생 클래스라고 합니다.
선언은 다음과 같이 이루어진다.
class 파생클래스이름 : 접근제어지시자 기초클래스이름[, 접근제어지시자 기초클래스이름, ...]
{
// 파생 클래스 멤버 리스트
}
class rectangle : protected square {
private :
int y_
public :
}
이런 느낌으로 정의하면 될 듯하다. 접근 제어 지시지를 생략할 경우 private로 자동 선언 된다.
또한 파생 클래스는 상위 클래스의 private 멤버를 접근할 수 없으므로 상위 클래스의 생성자를 사용하게 된다.
2020.08.17 추가
아무 생각 없이 넘어갔는데 선언할 떄의 접근 제어 지시자에 따른 상속 클래스의 멤버 접근 속성이 어떻게 되는지 궁금하여 검색해서 추가했다.
일관적으로 부모의 private 멤버에는 접근하지 못한다. public은 부모의 멤버 속성을 그대로 가져오고,
private와 protected는 상속되면서 멤버들이 각각 private와 protected로 변경된다.
rectangle::rectangle(const string& name, int x, int y) : square(const string& name, int x, int y){
int y_ = y;
}
선언에서와 동일하게 상위 클래스의 생성자를 콜론(:)을 이용해서 호출하고 있는 독특한 모습을 볼 수 있었다.
이렇게 생성자를 명시하지 않으면 상위 클래스의 디폴트 생성자가 호출되게 된다.
파생클래스의 생성자 및 소멸자 호출 순서는 다음과 같다.
1. 파생클래스의 생성자를 호출할 경우 상위 클래스의 생성자가 먼저 초기화를 진행한다.
2. 그 후 파생클래스의 생성자가 초기화를 진행한다.
3. 파생클래스의 수명이 다할 경우 파생클래스의 소멸자가 먼저 호출된다.
4 그 후 상위클래스의 소멸자가 호출된다.
'C++' 카테고리의 다른 글
스마트 포인터(smart pointer) (0) | 2020.08.18 |
---|---|
템플릿 (함수, 클래스) (0) | 2020.08.17 |
추상 클래스(abstract class) (0) | 2020.08.17 |
오버라이딩(overriding) (0) | 2020.08.14 |
프렌드(friend) (0) | 2020.08.11 |