[C++] Inheritance

2024. 4. 30. 00:39·C++

상속

  • 수퍼클래스의 멤버들을 서브클래스도 가짐
  • 서브클래스는 수퍼클래스를 포함 = 서브클래스는 수퍼클래스의 확장
  • 서브클래스는 수퍼클래스의 변수와 함수를 마치 자기 것처럼 사용 가능
  • 서브클래스는 수퍼클래스의 특수화, 수퍼클래스는 서브클래스의 일반화
  • 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
'C++' 카테고리의 다른 글
  • [C++] Exceptions
  • [C++] Polymorphism
  • [C++] Operators
  • [C++] Namespace
nueos
nueos
  • nueos
    nueos 공부 기록
    nueos
  • 전체
    오늘
    어제
    • 분류 전체보기 (191)
      • 해커톤 (1)
      • 네이버 BoostCamp (6)
      • LG 유플러스 유레카 SW (3)
        • React (21)
        • TypeScript (2)
        • JavaScript (2)
        • HTML+CSS (5)
        • Spring (7)
        • Java (6)
        • SQL (2)
        • Algorithm (8)
        • CX (6)
        • Git (2)
        • 프로젝트 (2)
        • 스터디 (9)
        • 과제 (8)
        • 특강 (1)
      • React (3)
      • Next (0)
      • Javascript (2)
      • HTML (2)
      • CSS (9)
      • Algorithm (6)
      • Database (0)
      • OS (13)
      • C++ (24)
      • Python (1)
      • jQuery (1)
      • Django (1)
      • Git (1)
      • 개발 지식 (3)
      • 정보 보안 (22)
      • 포렌식 (1)
      • 암호 (2)
      • 기타 (4)
      • 패스트캠퍼스 FE 프로젝트십 (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스택
    힙
    exhaustive search
    heap
    제주해커톤
    큐
    제주지역혁신플랫폼지능형서비스사업단
    완전 탐색
    Stack
    디지랩챌린지
    Queue
    기술로바꾸는세상
    디지털혁신
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
nueos
[C++] Inheritance
상단으로

티스토리툴바