상속
- 수퍼클래스의 멤버들을 서브클래스도 가짐
- 서브클래스는 수퍼클래스를 포함 = 서브클래스는 수퍼클래스의 확장
- 서브클래스는 수퍼클래스의 변수와 함수를 마치 자기 것처럼 사용 가능
- 서브클래스는 수퍼클래스의 특수화, 수퍼클래스는 서브클래스의 일반화
- is-a 관계 O, has-a 관계 X
- 중복 줄임
class Car {}
class Sub : public Car {}
접근제어자
접근 제어자 | 클래스 A | 서브클래스 subA | 클래스 B |
private | O | X | X |
protected | O | O | X |
public | O | O | O |
- 상속 유형에 따른 서브클래스의 멤버 함수에서 접근 가능성
- 상속 받으면서 제한 범위를 바꿈
- 최대 범위를 설정해서 그 범위보다 넓은 것은 모두 설정한 최대 범위로 바꿈
ex) protected(최대 범위)로 상속 시, public(최대 범위보다 넓음)은 protected가 됨
public으로 상속 | protected로 상속 | private로 상속 | |
수퍼클래스의 private 멤버 | 접근 안됨 | 접근 안됨 | 접근 안됨 |
수퍼클래스의 protected 멤버 | protected | protected | private |
수퍼클래스의 public 멤버 | public | protected | private |
생성자와 소멸자
- 수퍼클래스 생성자 → 서브클래스 생성자 → 서브클래스 소멸자 → 수퍼클래스 소멸자
- 서브클래스의 생성자 body가 열리기 전에 먼저 수퍼클래스의 생성자 실행됨
- 상속 관계에 있을 때 초기화 리스트는 수퍼클래스 이름을 쓰고, 상속 관계가 아닐 때는 초기화 리스트에 멤버 객체 변수 이름을 씀
- 수퍼클래스의 기본 생성자가 없으면 서브클래스가 수퍼클래스의 생성자를 무조건 호출해줘야함(수퍼클래스 생성자 명시적 호출)
오버라이딩(재정의)
서브클래스가 필요에 따라 상속된 멤버 함수를 다시 정의하는 것
- 조건
- 수퍼클래스의 멤버 함수와 동일한 시그니처를 가져야 함
- 멤버 함수의 이름, 반환형, 매개 변수의 개수와 데이터 타입이 일치
- Overriding(재정의) vs Overloading(중복 정의)
- 재정의: 수퍼클래스에 있던 상속받은 멤버 함수를 다시 정의하는 것
- 중복 정의: 같은 이름의 멤버 함수를 여러 개 정의하는 것
- 상속 관계에서만 overriding 존재
다중 상속
class Sub : public Sub1, public Sub2 {}
- 문제점: ambiguity
- 수퍼클래스의 동일한 이름의 변수, 함수에 접근하고 할 때 발생
728x90
반응형
'C++' 카테고리의 다른 글
[C++] Exceptions (0) | 2024.04.30 |
---|---|
[C++] Polymorphism (0) | 2024.04.30 |
[C++] Operators (0) | 2024.04.30 |
[C++] Namespace (0) | 2024.04.30 |
[C++] Objects (0) | 2024.04.30 |