[C++] 상속(Inheritance)과 접근제어(Access Control)

2024. 6. 27. 17:52·Programming Language/C++

상속과 접근제어

상속(Inheritance)

  • 부모가 자식에게 상속하면, 부모의 멤버들을 전부 사용하고, 자식만의 고유한 멤버를 추가로 가질 수 있다

  • 포함관계 : 부모가 자식을 포함하는 관계

    • 남자 ) 총각 이듯이 부모 ) 자식이다.

    • 자식이 부모한테 포함되는거고, 부모의 멤버가 자식의 멤버에 포함되는 것이다.

#include <iostream>
using namespace std;

class Base {
   public:
    void bFunc() {
        cout << "Hello!" << endl;
    }
    int bNum;
};
  • 자식 클래스(파생 클래스) 뒤에 콜론 ":"을 붙인 뒤 접근제어자와 부모 클래스를 적어준 뒤 선언하면 된다
class Derived : public Base {  // Base를 부모로 하는 클래스
   public:
    void dFunc() {
        cout << "Hello?" << endl;
    }
    int dNum;
};

int main(void) {
    Base b;
    Derived d;

    b.bFunc();
    b.bNum = 1;

    d.bFunc();
    d.bNum = 2;
    d.dFunc();
    d.dNum = 3;
}

접근 제어

  • 접근 제어 지시자

    • private : 클래스 내부에서만 접근 가능. 클래스 외부에서는 접근 불가

    • public : 클래스 내부, 외부에서 모두 접근 가능

      • 그리고 자식 클래스에서의 접근 제어를 위해서 protected 라는게 등장한다

      • public : 외부 접근 O 자식클래스 o

      • protected : 외부 접근 x 자식클래스 o

      • private : 외부 접근 x 자식클래스x

#include <iostream>
using namespace std;

class Base {
   public:
    int bPublic;

   protected:
    int bProtected;

   private:
    int bPrivate;
};

class Derived : public Base {  // 왜 public을 붙이는지는 아래에서 다룸
   public:
    int dPublic;
    void DFunc() {
        bPublic = 1;
        bProtected = 2;
        // bPrivate는 접근이 불가능함.
        dPublic = 4;
        dPrivate = 5;
    }

   private:
    int dPrivate;
};
  • bPrivate는 부모에서 private로 선언되어 접근이 불가능함

  • 부모 클래스의 private을 제외하곤 자식 클래스에서 접근이 가능하다

int main(void) {
    Base b;
    Derived d;

    b.bPublic = 1;
    // b.bProtected X
    d.bPublic = 1;
    // d.bPrivate, d.bProtected x
    d.dPublic = 1;
}
  • 이 부분을 다시 살펴보자
class Derived : public Base {  // Protected Base의 경우 Protected 보다 더 공개된 멤버들을 Protected 공개수준으로 낮춤.
                               // Private Based의 경우 public이랑 protected 가 privated 공개수준으로 바뀜.
  • 자식이 public으로 상속 받으면 부모의 public을 public 그대로 상속받는다.

    • 부모의 protected와 private는 자식에게 동일하게 protected, private로 상속된다

    • 일반적으로 대부분 경우 public으로 상속을 받음

  • 자식이 protected으로 상속 받으면 부모의 public을 protected 수준으로 상속받는다.

  • 자식이 private으로 상속 받으면 부모의 public, protected를 private 수준으로 상속받는다.

'Programming Language > C++' 카테고리의 다른 글

[C++] 오버라이딩(Overriding)과 정적 바인딩(Static Binding)  (0) 2024.06.27
[C++] 상속이 필요한 이유(1)  (0) 2024.06.27
[C++] Implicit Conversion(묵시적 형변환)  (0) 2024.06.27
[C++] 이동 시맨틱(Move Semantics): 이동 생성자, 이동 대입 연산자  (0) 2024.06.27
[C++] 대입 연산자 오버로딩  (0) 2024.03.12
'Programming Language/C++' 카테고리의 다른 글
  • [C++] 오버라이딩(Overriding)과 정적 바인딩(Static Binding)
  • [C++] 상속이 필요한 이유(1)
  • [C++] Implicit Conversion(묵시적 형변환)
  • [C++] 이동 시맨틱(Move Semantics): 이동 생성자, 이동 대입 연산자
lumana
lumana
배움을 나누는 공간 https://github.com/bebeis
  • lumana
    Brute force Study
    lumana
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • Spring N
        • MVC
        • DB
        • 핵심 원리
        • JPA
      • WEB
        • HTML
        • CSS
        • HTTP
        • Application
      • Computer Science
        • Network
        • Database
        • OS
        • 시스템 프로그래밍
        • 컴퓨터구조
      • Algorithm
        • Divide&Conquer
        • Sort
        • Greedy
        • DP
        • Backtracking
        • NP-Complete
        • Graph
      • Data Structure
        • 자료구조
        • C++ STL
        • Java Collection
      • 소프트웨어 공학
        • 시험 공부 정리
        • Theorem
      • Programming Language
        • Python
        • Java
        • C
        • C++
        • Rust
        • Theory
      • Unix_Linux
        • Common
      • React
      • PS
        • BOJ
        • Tip
        • 프로그래머스
        • CodeForce
      • Book Review
        • Clean Code
      • Math
        • Linear Algebra
      • AI
        • DL
        • ML
        • DA
        • Concepts
      • 우아한테크코스
        • 프리코스
      • Project Review
      • LegacyPosts
      • Android
      • Apple
        • Mac
        • IPhone
        • IPad
      • 모니터
      • Diary
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
lumana
[C++] 상속(Inheritance)과 접근제어(Access Control)
상단으로

티스토리툴바