Programming | 프로그래밍 언어/C++

C++에서 상속에 대해 정리

gyunnnnnn 2023. 1. 13. 20:11

상속이란?

  • 기존에 정의해 놓은 클래스의 재활용을 목적으로 만들어진 문법적 요소이다.
    class Base{};
    class Derived : public Base{};

상속받은 클래스(파생 클래스)의 생성자 정의

  • 파생 클래스의 객체 생성 과정에서 기초 클래스의 생성자는 무조건 호출된다.
  • 파생 클래스의 생성자는 기초 클래스의 멤버까지 초기화 할 의무가 있다.
  • 파생 클래스의 생성자는 기초 클래스의 생성자를 호출해서 부모 클래스의 멤버를 초기화 하는 것이 좋다.
  • 파생 클래스의 생성자에서 기초 클래스의 생성자 호출을 명시하지 않으면, 기초 클래스void 생성자가 호출된다.
  • 접근 제한의 기준은 클래스이므로 상속받은 private 변수는 그 클래스의 public 함수를 통해서 간접적으로 접근을 해야한다.

파생 클래스의 객체 생성과정

  1. 메모리 공간 할당
  2. 파생 클래스의 생성자 호출
  3. 기초 클래스의 생성자 호출
  4. 기초 클래스의 생성자 실행
  5. 파생 클래스의 생성자 실행
  6. 객체 생성 완료

파생 클래스 객체의 소멸과정

  • 파생 클래스의 객체가 소멸될 때는, 파생 클래스소멸자가 실행되고 기초 클래스소멸자가 실행된다.
  • 소멸자에선 자신의 생성자에서 할당한 메모리 공간에 대한 해제만을 책임진다.
  • 스택에 생성된 객체의 소멸순서는 생성순서와 반대이다.

세 가지 형태의 상속

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