상속이란?
- 기존에 정의해 놓은 클래스의 재활용을 목적으로 만들어진 문법적 요소이다.
class Base{}; class Derived : public Base{};
상속받은 클래스(파생 클래스)의 생성자 정의
- 파생 클래스의 객체 생성 과정에서 기초 클래스의 생성자는 무조건 호출된다.
- 파생 클래스의 생성자는 기초 클래스의 멤버까지 초기화 할 의무가 있다.
- 파생 클래스의 생성자는 기초 클래스의 생성자를 호출해서 부모 클래스의 멤버를 초기화 하는 것이 좋다.
- 파생 클래스의 생성자에서 기초 클래스의 생성자 호출을 명시하지 않으면, 기초 클래스의 void 생성자가 호출된다.
- 접근 제한의 기준은 클래스이므로 상속받은
private
변수는 그 클래스의public
함수를 통해서 간접적으로 접근을 해야한다.
파생 클래스의 객체 생성과정
- 메모리 공간 할당
- 파생 클래스의 생성자 호출
- 기초 클래스의 생성자 호출
- 기초 클래스의 생성자 실행
- 파생 클래스의 생성자 실행
- 객체 생성 완료
파생 클래스 객체의 소멸과정
- 파생 클래스의 객체가 소멸될 때는, 파생 클래스의 소멸자가 실행되고 기초 클래스의 소멸자가 실행된다.
- 소멸자에선 자신의 생성자에서 할당한 메모리 공간에 대한 해제만을 책임진다.
- 스택에 생성된 객체의 소멸순서는 생성순서와 반대이다.
세 가지 형태의 상속
public 상속
public
으로 선언된 멤버변수는 모든 클래스에서 접근이 가능하다.
protected 상속
protected
로 선언된 멤버변수는 이를 상속하는 파생 클래스에서 접근이 가능하다.
private 상속
private
로 선언된 멤버변수는 접근이 불가능하다.A <- B <- C
관계에서 B를private
상속하면 C가 B를public
으로 상속받아도 B의 멤버변수에 접근이 불가능하다.
상속을 위한 조건
- 상속을 위한 기본 조건으로는
IS-A
관계의 성립이 있다. HAS-A
관계도 상속의 조건은 되지만 객체 합성으로 이를 대신하는 것이 일반적이다.- 상속을 통해 연관된 일련의 클래스에 대해 공통적인 규약을 정의할 수 있다.
'Programming | 프로그래밍 언어 > C++' 카테고리의 다른 글
다중 상속과 가상 상속 (0) | 2023.01.27 |
---|---|
가상 함수 (0) | 2023.01.16 |
const, friend, static, mutable, explicit (0) | 2022.11.27 |
Dangling Pointer (0) | 2022.11.19 |
C++ STL 벡터, 리스트, 덱 비교 (0) | 2022.11.18 |