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

2024. 6. 27. 17:52·Programming Language(Sub)/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(Sub) > 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++ STL] 3.4 C++ 해시 테이블  (0) 2024.06.23
'Programming Language(Sub)/C++' 카테고리의 다른 글
  • [C++] 오버라이딩(Overriding)과 정적 바인딩(Static Binding)
  • [C++] 상속이 필요한 이유(1)
  • [C++] Implicit Conversion(묵시적 형변환)
  • [C++] 이동 시맨틱(Move Semantics): 이동 생성자, 이동 대입 연산자
lumana
lumana
배움을 나누는 공간 https://github.com/bebeis
  • lumana
    Brute force Study
    lumana
  • 전체
    오늘
    어제
    • 분류 전체보기 (456)
      • Software Development (27)
        • Performance (0)
        • TroubleShooting (1)
        • Refactoring (0)
        • Test (8)
        • Code Style, Convetion (0)
        • DDD (0)
        • Software Engineering (18)
      • Java (71)
        • Basic (5)
        • Core (21)
        • Collection (7)
        • 멀티스레드&동시성 (13)
        • IO, Network (8)
        • Reflection, Annotation (3)
        • Modern Java(8~) (12)
        • JVM (2)
      • Spring (53)
        • Framework (12)
        • MVC (23)
        • Transaction (3)
        • AOP (11)
        • Boot (0)
        • AI (0)
      • DB Access (1)
        • Jdbc (1)
        • JdbcTemplate (0)
        • JPA (14)
        • Spring Data JPA (0)
        • QueryDSL (0)
      • Computer Science (129)
        • Data Structure (27)
        • OS (14)
        • Database (10)
        • Network (21)
        • 컴퓨터구조 (5)
        • 시스템 프로그래밍 (23)
        • Algorithm (29)
      • HTTP (8)
      • Infra (1)
        • Docker (1)
      • 프로그래밍언어론 (15)
      • Programming Language(Sub) (77)
        • Kotlin (1)
        • Python (25)
        • C++ (51)
        • JavaScript (0)
      • FE (11)
        • HTML (1)
        • CSS (9)
        • React (0)
        • Application (1)
      • Unix_Linux (0)
        • Common (0)
      • PS (13)
        • BOJ (7)
        • Tip (3)
        • 프로그래머스 (0)
        • CodeForce (0)
      • Book Review (4)
        • Clean Code (4)
      • Math (3)
        • Linear Algebra (3)
      • AI (7)
        • DL (0)
        • ML (0)
        • DA (0)
        • Concepts (7)
      • 프리코스 (4)
      • Project Review (6)
      • LegacyPosts (11)
      • 모니터 (0)
      • Diary (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

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

티스토리툴바